サーチ…


前書き

TRUNCATE文は、テーブルからすべてのデータを削除します。これはフィルタなしのDELETEに似ていますが、データベースソフトウェアによっては、特定の制限と最適化があります。

構文

  • TRUNCATE TABLE table_name;

備考

TRUNCATEはDDL(データ定義言語)コマンドであり、DELETE(データ操作言語、DML、コマンド)との間には大きな違いがあります。 TRUNCATEはデータベースから大量のレコードをすばやく削除する手段ですが、TRUNCATEコマンドを使用して特定の状況に適しているかどうかを判断するには、これらの相違点を理解する必要があります。

  • TRUNCATEはデータページ操作です。したがって、TRUNCATE操作を実行すると、表に関連付けられたDMLトリガー(ON DELETE)は起動しません。大量の削除操作には時間がかかりますが、手動で関連データを削除する必要があります。
  • TRUNCATEは削除された行で使用されるディスク領域を解放し、DELETEは領域を解放します
  • 切り捨てられるテーブルがIDカラム(MS SQL Server)を使用する場合、シードはTRUNCATEコマンドによってリセットされます。これにより参照整合性の問題が発生する可能性があります
  • 使用されているセキュリティロールと使用されているSQLの種類に応じて、TRUNCATEコマンドを実行するために必要な権限がない場合があります

Employeeテーブルからすべての行を削除する

TRUNCATE TABLE Employee;

truncateテーブルを使用すると、インデックスとトリガをすべて無視してすべてを削除するだけなので、DELETE TABLEを使用する方が良い場合があります。

テーブルの削除は行ベースの操作です。つまり、各行が削除されます。 Truncate tableは、データページ全体のデータを再割り当てします。 100万行のテーブルがある場合は、テーブルを削除するほうがテーブルの削除ステートメントを使うほうがずっと速くなります。

DELETEを使用して特定の行を削除することはできますが、特定の行をTRUNCATEすることはできません。すべてのレコードを一度にTRUNCATEすることしかできません。すべての行を削除してから新しいレコードを挿入すると、以前に挿入された値からAuto Incremented Primary Key値が引き続き追加されます.Truncateでは、Auto Incremental主キー値もリセットされ、1から開始します。

テーブルを切り捨てるときには、外部キーが存在していなければなりません 。それ以外の場合は、エラーが発生します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow