中学理科1626207 views
いろは2986023 views
高校化学2913383 views
高校生物549842 views
高校国語785655 views
Computer365120 views
世界の国560595 views
中学英語808712 views
りんご192546 views
ヒストリア284143 views
Help
Tools

English

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;
項目DELETETRUNCATE
WHERE 条件使える使えない(全行のみ)
速度遅い(行ごとに処理)速い(一括削除)
AUTO_INCREMENTリセットされないリセットされる
トランザクションロールバック可能できない場合がある

TRUNCATE はテーブルを空にするときに使いますが、ロールバックできないなど制約があります。通常の削除には DELETE を使いましょう。

DELETE は取り消せない操作です。本番環境では慎重に実行してください。