SQL削除文DROP、TRUNCATE、DELETEの違い


DROP:

DROP TABLE test;
表testを削除し、空間を解放し、testをきれいに削除します。
TRUNCATE:

TRUNCATE test;
表testの内容を削除して、空間を解放しますが、表の定義を削除しないで、表の構造はまだあります。
DELETE:
1、指定データの削除
表testの年齢が30に等しく、国がUSのデータを削除します。

DELETE FROM test WHERE age=30 AND country='US';
2、テーブル全体を削除する
表のtest内のすべての内容だけを削除して、表の定義を保留して、空間を釈放しません。

DELETE FROM test    TRUNCATE test;
truncate tableコマンドは、データテーブルのすべてのレコードを素早く削除しますが、データテーブル構造を保持します。このような急速な削除はdelete fromデータテーブルの削除と全部のデータテーブル記録と違って、deleteコマンド削除のデータはシステムロールバックに格納され、必要な時にはデータはロールバックして回復できますが、truncateコマンド削除のデータは回復できません。
同じ点
truncateとwhere子文を持たないdeleteとdropは表のデータを削除します。
違い点:
  • 1.truncateとdeleteはデータだけを削除してテーブルの構造(定義)を削除しません。drop文は削除テーブルの構造に依存する制約、トリガー、インデックス(index)を削除します。この表に依存する格納プロセス/関数は保存されますが、invalid状態になります。
  • .delete文はdmlで、この操作はrollback segementに置いて、事務が提出されてから有効になります。該当するtriggerがあれば、実行時にトリガされます。truncate、dropはddlで、操作は直ちに有効になります。元のデータはrollback segmentに入れないと、ロールバックできません。操作はトリガーをトリガしません。
  • .delete文は表に占用されたextentに影響を与えず、高水線は元の位置を維持して動かない。明らかにdrop文は表の占有空間を全部解放します。truncate文がデフォルトの場合は、reuse storgeを使用しない限り、minextetsのextentに空間放出される。truncateは高水線をリセットします(最初に戻ります)。
  • .速度:概して、drop>truncate>delete。
  • .安全性:dropとtruncateを注意深く使用し、特にバックアップがない場合。泣かないと間に合わないです。
  • 最後に
    使用上、一部のデータ行を削除したいです。deleteで、where子文を持つように注意してください。ロールバックは十分大きいです。
    表を削除したいですが、もちろんdropを使います。
    テーブルを予約して、すべてのデータを削除します。事務と関係がないなら、truncateを使えばいいです。事務と関係がある場合、またはトリガーを触発したい場合は、やはりdeleteを使います。
    テーブル内部の破片を整理する場合は、truncateでreuse strogeについてきて、データを再導入/挿入することができます。
    以上はSQL削除文DROP、TRUNCATE、DELETEの違いの詳細です。sql削除文に関する資料は他の関連記事に注目してください。