SQL の TRUNCATE と DELETE の違いを深く理解する
SQL の TRUNCATE と DELETE コマンドはどちらもテーブル内のデータを削除するために使用されますが、通常、TRUNCATE の方がより高速かつ完全なデータ削除方法を提供します。
ステートメントの種類
DML (データ操作言語) である DELETE とは異なり、TRUNCATE は DDL (データ定義言語) に属します。
コミットとロールバック
コマンドのロールバック機能はデータベースによって異なります:
宇宙リサイクル
DELETE は空き領域を残しますが、TRUNCATE は空き領域を再利用します。 Oracle の REUSE STORAGE オプションを使用すると、データ セグメントを保存できるため、テーブルを再ロードする際の効率が向上します。
行範囲
DELETE では行を選択的に削除できますが、TRUNCATE ではすべての行が無条件に削除されます。 Oracle では、パーティション化されたテーブル内の特定のパーティションを切り捨てることができます。
オブジェクトタイプ
DELETE はテーブルおよびクラスター化テーブルに対して機能しますが、TRUNCATE はテーブルまたはクラスター全体 (Oracle 固有) に限定されます。
データオブジェクト識別子
Oracle では、テーブルの作成後に挿入操作が発生していない限り、DELETE はデータ オブジェクト ID を保持しますが、TRUNCATE は新しい ID を割り当てます。
フラッシュバック (オラクル)
DELETE はフラッシュバック機能をサポートしますが、FLASHBACK ARCHIVE 機能が使用されない限り、TRUNCATE はフラッシュバック機能をブロックします。
権限
DELETE 権限はユーザーに付与できますが、TRUNCATE には DROP ANY TABLE 権限 (Oracle 固有) が必要です。
パフォーマンスノート
トリガーとリモート実行
TRUNCATE は DDL トリガーをサポートします (Oracle 固有)。 Oracle では、リモート TRUNCATE の実行は許可されていません。
ID 列
SQL Server では、TRUNCATE は ID 列シーケンスをリセットしますが、DELETE はリセットしません。
結果セット
Oracle PL/SQL では、DELETE ステートメントは削除された行をクライアントに返すことができます。
以上がSQL における TRUNCATE と DELETE: 主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。