Loading article…
SQLでは、このTRUNCATE TABLE文はトリガーアクションを起こさずにテーブルのすべての行を削除するデータ定義言語(DDL) 操作です。 [1] この操作の結果、通常はいくつかの整合性強制メカニズムをバイパスして、テーブルからすべてのデータがすばやく削除されます。これは、オプション機能 F200、「TRUNCATE TABLE 文」として、 SQL:2008標準で正式に導入されました。
TRUNCATE TABLE はテーブルからすべての行を削除しますが、テーブル構造とその列、制約、インデックスなどは残ります。データに加えてテーブル定義も削除するには、DROP TABLEステートメントを使用します。
このTRUNCATE TABLE mytable文は、論理的には (物理的にはそうではないが)DELETE FROM mytable文 (WHERE節なし) と同等である。 との違いは以下のとおりTRUNCATE TABLEであるDELETE。
- Oracle データベースでは、コミット
TRUNCATE操作の前後に暗黙的にコミット操作が行われます。(トランザクション ストレージ エンジンを使用する場合、MySQLでも同様のことが起こります。) - 通常、
TRUNCATE TABLEテーブルで使用されているデータ ページの割り当てを解除することで、テーブル内のすべてのレコードをすばやく削除します。これにより、削除のログ記録のリソース オーバーヘッドと取得されるロックの数が削減されます。この方法で削除されたレコードは、ロールバック操作では復元できません。このルールの 2 つの注目すべき例外は、 PostgreSQLとMicrosoft SQL Serverの実装です。どちらもTRUNCATE TABLE、ステートメントをトランザクションとしてコミットまたはロールバックできます。 WHERE文中に句を指定することはできませんTRUNCATE TABLE。TRUNCATE TABLE外部キーが切り捨てられるテーブルを参照している場合、ステートメントはトリガーをTRUNCATE TABLE起動しないため、使用できません。トリガーが起動しないため、データの不整合が発生する可能性があります。ON DELETEON UPDATE- 一部のコンピュータ システムでは、ID 列
TRUNCATE TABLEのカウントをID のシードにリセットします。 - Microsoft SQL Server 2000以降の完全復旧モードでは、データベースへのすべての変更がログに記録されるため、ログ配布
TRUNCATE TABLEに関係するテーブルに対してステートメントを使用できます。[2]
参考文献
- ^ 「ISO/IEC 9075 データベース言語 SQL」. iso.org . 2023年6月4日閲覧。
- ^ 「SQL Server でのトランザクション ログのバックアップと復元プロセスにおける、ログに記録されない操作と最小限のログに記録される操作の影響の説明」。Microsoft。2005 年 12 月。
