💣
「DELETE FROMで世界が消えた」―よくあるSQL事故と5つの対策
はじめに
SQLでデータを操作する際に、誤って重要なデータを削除してしまう事故は非常に多いです。
特にDELETE文やUPDATE文は一度実行すると元に戻せないことも多く、一瞬で世界が消えることも...。
この記事では、そんなSQL事故を未然に防ぐための具体的な対策をわかりやすくまとめてみました!
5つの対策
1. WHERE句は絶対に確認する
DELETE FROM users; -- ❌全部消える
DELETE FROM users WHERE id = 3; -- ✅必要なデータだけ
※WHEREがない = 全件操作と覚えよう。
2. SELECTで事前に確認してから実行する
-- まずはSELECT
SELECT * FROM users WHERE id = 3;
-- 問題なければ実行
DELETE FROM users WHERE id = 3;
※「まずSELECT」は事故防止の鉄則。
※念の為、実行後に再度SELECTで確認。
3. トランザクション機能でロールバックできるようにする
-- トランザクション開始
BEGIN;
-- まずはSELECT
SELECT * FROM users WHERE id = 3;
-- 問題なければ実行
DELETE FROM users WHERE id = 3;
-- やっぱり問題があればロールバック↓
-- ROLLBACK;
-- 問題なければコミット↓
-- COMMIT;
※ BEGIN → ROLLBACK or COMMIT
4. DELETEより論理削除を使う
DELETE FROM users WHERE id = 3; -- ❌物理削除
UPDATE users SET deleted = TRUE WHERE id = 3; -- ✅論理削除
※誤削除しても復元可能にしておくと安心。
5. DROP TABLEは極力避ける(特に本番)
DROP TABLE users; -- ❌一発アウト
※もし使うなら「復元できるバックアップ」があるかどうか確認。
その他の対策
バックアップ or テストDBで事前検証する
本番データを直接触る前に、必ずテスト環境で動作確認。
可能ならデータをダンプ(データベースの中身をファイルに書き出して保存)しておく。
スクリプト化&バージョン管理する
その場のコマンドで実行せず、SQLファイルにしてGit管理。
履歴を残すことで、再現・ロールバックがしやすくなる。
怪しいSQLは「誰かに見せる」
大規模UPDATEやDELETEは、上司や同僚に「念のため見てもらう」。
特に「一発実行で戻せないSQL」はレビュー必須。
おわりに
SQLの操作ミスは、一瞬の不注意で大きな事故につながります。
この記事で紹介した対策を日々の業務に取り入れ、データの安全を守っていきましょう。
「DELETE FROMで世界が消えた…」なんてことが起きないように、しっかり確認してから実行する習慣を身につけていきましょう!
Discussion