DELETE でデータを削除する
テーブルからデータを削除するには DELETE 文を使います。
基本構文
DELETE FROM テーブル名 WHERE 条件;たとえば users テーブルから id が 1 の行を削除するには、こう書きます。
DELETE FROM users WHERE id = 1;WHERE を忘れると全行が削除される
DELETE 文で WHERE を省略すると、テーブルのすべての行が削除されてしまいます。
-- 危険!全行が消える
DELETE FROM users;UPDATE と同様、これは非常に危険です。DELETE を実行する前に、WHERE 条件をしっかり確認してください。
WHERE あり
条件に合う行だけが削除される
WHERE なし
全行が削除される(危険)
複数の条件で削除する
WHERE 句で AND や OR を使えば、複数の条件を組み合わせられます。
-- 2023年より前に作成された非アクティブユーザーを削除
DELETE FROM users WHERE created_at < '2023-01-01' AND status = 'inactive';LIMIT と組み合わせる
DELETE に LIMIT をつけると、削除する行数を制限できます。
-- 最初の 100 件だけ削除
DELETE FROM users WHERE status = 'inactive' LIMIT 100;大量のデータを削除するとき、一度に処理するとテーブルがロックされて他の処理に影響することがあります。LIMIT で少しずつ削除するのは実務でよく使うテクニックです。
削除前に確認する
UPDATE と同じく、DELETE の前に SELECT で対象を確認しておくと安心です。
-- まず対象を確認
SELECT * FROM users WHERE status = 'inactive';
-- 問題なければ削除
DELETE FROM users WHERE status = 'inactive';TRUNCATE との違い
全行を削除するなら TRUNCATE という方法もあります。
TRUNCATE TABLE users;| 項目 | DELETE | TRUNCATE |
|---|---|---|
| WHERE 条件 | 使える | 使えない(全行のみ) |
| 速度 | 遅い(行ごとに処理) | 速い(一括削除) |
| AUTO_INCREMENT | リセットされない | リセットされる |
| トランザクション | ロールバック可能 | できない場合がある |
TRUNCATE はテーブルを空にするときに使いますが、ロールバックできないなど制約があります。通常の削除には DELETE を使いましょう。
DELETE は取り消せない操作です。本番環境では慎重に実行してください。












