ホームページ > データベース > mysql チュートリアル > SQL の TRUNCATE と DELETE: いつどちらを使用する必要がありますか?

SQL の TRUNCATE と DELETE: いつどちらを使用する必要がありますか?

Mary-Kate Olsen
リリース: 2025-01-15 06:52:44
オリジナル
127 人が閲覧しました

TRUNCATE vs. DELETE in SQL: When Should I Use Which?

SQL の TRUNCATE と DELETE の違い

TRUNCATE と DELETE は、SQL でテーブル データを削除するときに 2 つのオプションを提供します。情報に基づいた意思決定を行うには、それぞれの異なる特性を理解することが重要です。

概要

データを保持せずにテーブル内のすべての行を迅速に削除することが目標の場合、通常は TRUNCATE の方が DELETE よりも高速です。ただし、システム固有の要因も考慮する必要があります。

ステートメントの種類

TRUNCATE はデータ定義言語 (DDL) ステートメントとして分類され、DELETE はデータ操作言語 (DML) ステートメントとして分類されます。この区別は、特定の状況における彼らの行動に影響を与えます。

コミットとロールバック

データベース ベンダーによっては、TRUNCATE がロールバックできる場合とできない場合があります。 PostgreSQL と SQL*Server では TRUNCATE のロールバックが可能ですが、Oracle ではコミットされた操作として扱われます。

宇宙リサイクル

TRUNCATE は、割り当てられたデータセグメントを解放することでストレージスペースを再利用します。一方、DELETE は、削除された行が占めていたスペースを保持します。

行範囲

TRUNCATE はテーブル内のすべての行を削除しますが、DELETE は条件に基づいて特定の行をターゲットにすることができます。

オブジェクトタイプ

TRUNCATE はテーブルまたはクラスター全体 (ベンダー固有) に適用できます。 DELETE はテーブルおよびクラスター内のテーブルに対して機能します。

データオブジェクト識別子

Oracle では、DELETE はデータ オブジェクト ID に影響しませんが、以前にデータがテーブルに挿入されていない限り、TRUNCATE は新しい ID を割り当てます。

フラッシュバック (Oracle)

DELETE はフラッシュバックをサポートしており、データを以前の状態から復元できます。一方、TRUNCATE は、切り捨て前の状態へのフラッシュバックを防ぎます。ただし、Oracle 11gR2 の FLASHBACK ARCHIVE 機能を使用すると、この問題を軽減できます。

権限

TRUNCATE 権限を付与できる機能はベンダーによって異なります。 Oracle では DROP ANY TABLE 権限が必要ですが、他のシステムではこの権限を特定のユーザーまたはロールに付与できる場合があります。

インデックス

Oracle の TRUNCATE は、使用できないインデックスを再度有効にします。 DELETE にはこの効果はありません。

外部キー

テーブルへのアクティブな外部キー参照がある場合、TRUNCATE は実行できません。 DELETE の動作は、外部キーの構成によって異なります。

トリガー

DDL トリガーは TRUNCATE 操作によってアクティブ化できますが、DML トリガーは起動されません。

リモート実行

Oracle では、データベース リンクを介して TRUNCATE を実行できません。

ID 列

SQL*Server では、TRUNCATE は IDENTITY 列のシーケンスをリセットしますが、DELETE はリセットしません。

以上がSQL の TRUNCATE と DELETE: いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート