DELETE, TRUNCATE, DROPの違いについて理解する
前回に引き続きLeetCodeの問題はお休み。
LeetCodeではあまり出てこないテーマを一気に学習します。
今回のテーマはDELETE, TRUNCATE, DROPの違いです。
DELETE, TRUNCATE, DROPも全てテーブルのデータを一括して削除することができます。
前回同様にdb<>fiddleを使います。
構文は下記の通り
SQL
DELETE テーブル名 WHERE句 -- WHERE句を省略すると全データ削除
TRUNCATE TABLE テーブル名
DROP TABLE テーブル名
まとめると
| クエリ | 削除範囲 | ロールバック | 速度 | テーブル構造 |
|---|---|---|---|---|
| DELETE | WHEREで指定可能 | 可能 | 遅い | 残る |
| TRUNCATE TABLE | 指定不可 | 不可能 | 早い | 残る |
| DROP TABLE | 指定不可 | 不可能 | 早い | 残らない |
ロールバックについては十分に理解できていないのですが、
COMMITしていなければ削除の取り消しが可能ということです。
下記が実行例です。
CREATE TABLE tbl1 (id INT, name varchar(1)) INSERT INTO tbl1 (id, name) VALUES(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd'),(5, 'e') SELECT id, name FROM tbl1 DELETE tbl1 WHERE id > 3 SELECT id, name FROM tbl1 TRUNCATE TABLE tbl1 SELECT id, name FROM tbl1 DROP TABLE tbl1 -- SELECT id, name -- FROM tbl1
GOid | name -: | :--- 1 | a 2 | b 3 | c 4 | d 5 | e id | name -: | :--- 1 | a 2 | b 3 | c id | name -: | :---
db<>fiddle here
DROP TABLE後に、SELECT文を使用すると、テーブルそのものが無いので下記のエラーが出てきます。
Msg 208 Level 16 State 1 Line 20
Invalid object name 'tbl1'.
今日のポイントはDELETE, TRUNCATE, DROPの違いとした。