最も明らかな違い:
テーブルを直接削除する
truncateはテーブル内のデータを削除し、挿入時に自己増加IDは1から始まります
deleteテーブル内のデータを削除するには、whereワードを追加します。
(1)DELETEステートメントは、削除プロセスを実行してテーブルから行を毎回削除すると同時に、行の削除操作をトランザクションとして記録し、ロールバック操作のためにログに保存します。TRUNCATE TABLEは、テーブルからすべてのデータを一度に削除し、個々の削除操作レコードをストレージのログに記録しません。削除された行は復元できません。また、テーブルに関連する削除トリガーは、削除プロセス中にアクティブ化されません。実行速度が速い。
(2)テーブルとインデックスが占めるスペース。テーブルがTRUNCATEの場合、テーブルとインデックスが占めるスペースは元のサイズに復元され、DELETE操作はテーブルまたはインデックスが占めるスペースを削減しません。dropステートメントは、テーブルが占めるすべてのスペースを解放します。
(3)一般的に、ドロップ>切り捨て>削除
(4)適用範囲。TRUNCATEはTABLEにのみ使用でき、DELETEはテーブルとビューに使用できます
(5)TRUNCATEとDELETEはデータのみを削除し、DROPはテーブル全体(構造とデータ)を削除します。
(6)切り捨てて削除する場所なし:テーブルの構造(定義)を削除せずに、データのみを削除します。dropステートメントは、テーブルの構造が依存している制約、トリガー、およびインデックスを削除します。このテーブルに保存されているプロシージャ/関数は保持されますが、ステータスは無効になります。
(7)削除ステートメントはDML(Data Manipulation Language)であり、この操作はロールバックセグメントに配置され、トランザクションがコミットされた後に有効になります。対応するティガーがある場合は、実行時にトリガーされます。
(8)切り捨てと削除はDDL(データ定義言語)であり、操作はすぐに有効になり、元のデータはロールバックセグメントに配置されず、ロールバックできません。
(9)バックアップがない場合は、ドロップと切り捨てを慎重に使用してください。一部のデータ行を削除するには、deleteを使用し、影響範囲を制限する場所の組み合わせに注意してください。ロールバックセグメントは十分に大きくなければなりません。テーブルを削除するには、dropを使用します。テーブルを保持してテーブル内のデータを削除する場合、トランザクションとは関係がない場合は、truncateを使用できます。それがビジネスに関連している場合、または教師がトリガーをトリガーしたい場合でも、削除を使用します。
(10)テーブルテーブル名の切り捨ては、次の理由で高速かつ効率的です。テーブルの切り捨ては、WHERE句のないDELETEステートメントと機能的に同じです。両方ともテーブル内のすべての行を削除します。ただし、TRUNCATE TABLEはDELETEよりも高速であり、使用するシステムおよびトランザクションログリソースが少なくなります。DELETEステートメントは、一度に1行を削除し、削除された行ごとにトランザクションログにエントリを記録します。TRUNCATE TABLEは、テーブルデータの保存に使用されるデータページを解放することによってデータを削除し、ページの解放のみをトランザクションログに記録します。
(11)TRUNCATE TABLEはテーブル内のすべての行を削除しますが、テーブル構造とその列、制約、インデックスなどは変更されません。新しい行の識別に使用されるカウント値は、列のシードにリセットされます。マークカウント値を保持したい場合は、代わりにDELETEを使用してください。テーブル定義とそのデータを削除する場合は、DROPTABLEステートメントを使用します。
(12)FOREIGN KEY制約によって参照されるテーブルの場合、TRUNCATE TABLEは使用できませんが、WHERE句のないDELETEステートメントを使用する必要があります。TRUNCATE TABLEはログに記録されないため、トリガーをアクティブにすることはできません。