基本の違い
比較項目 | DELETE | TRUNCATE |
---|---|---|
操作内容 | 指定した条件の行を削除 | テーブルの全行を削除 |
条件指定 | WHERE 句で条件を指定可能 | 条件指定不可(全件削除) |
トランザクション | ロールバック可能(通常のDELETE) | DBによるが、ほとんどの場合テーブル全体削除なので高速。DBによってはロールバック不可 |
パフォーマンス | 遅い(行単位で削除、ログも生成) | 速い(データページを丸ごと解放、ログが少ない) |
トリガー | 発火する(DELETE トリガー) | 発火しないことが多い(DB依存) |
ID(オートインクリメント) | 通常は連番保持 | DBによってはリセットされることがある(MySQLなど) |
DELETE文
--条件付きで削除
DELETE FROM users
WHERE age < 20;
「20歳未満のユーザーだけ削除したい」など条件付きで使う。
トリガー発動やロールバック可能。
TRUNCATE文
TRUNCATE TABLE users;
「テーブル内をまっさらにしたい」場合に使う。
高速だが、WHEREで条件指定はできない。
注意点
TRUNCATE は高速だが注意
全データが消えるので、誤って実行すると復元が困難。
オートインクリメントもリセットされることがある。
DELETE は条件指定が可能
必要な行だけ消せる
ロールバックもできるので安全性高い
トリガーの扱い
DELETE トリガーは発動
TRUNCATE は発動しないことが多い(DB依存)