DELETE コマンドと TRUNCATE コマンドの違いは、面接の質問で最も一般的な部分です。これらは主にデータベースからデータを削除するために使用されます。 これらの主な違いは、delete ステートメントはテーブルの ID をリセットせずにデータを削除するのに対し、truncate コマンドは特定のテーブルの ID をリセットすることです。 。この記事では、DELETE コマンドと TRUNCATE コマンドの完全な概要と、主に同じ意味で使用されますがまったく異なるそれらの違いについて説明します。
DELETEコマンドとは何ですか?
それは DML またはデータ操作コマンド データベースで不要なレコードをテーブルから削除するために使用されます。テーブルから完全な行を削除し、削除された行の数を生成します。このコマンドを実行するには、ターゲットテーブルに対する削除権限が必要です。また、 どこ 表からの条項。
このクエリを使用して削除されたレコードを回復することはできないため、このコマンドを実行する前にデータベースのバックアップがあることが明確になります。したがって、 データベースのバックアップ 将来必要になったときにいつでもデータを復元できるようにします。
次の構文は、テーブルからデータを削除する DELETE コマンドについて説明しています。
DELETE FROM table_name WHERE condition;
TRUNCATEコマンドとは何ですか?
truncate ステートメントは、 DDL またはデータ定義言語コマンド テーブル構造を削除せずにテーブルから完全なデータを削除するために使用されます。は使用できません。 どこ このコマンドでは句を使用するため、レコードのフィルタリングはできません。このコマンドを実行した後、 削除されたデータをロールバックできません この操作の実行中はログが維持されないためです。
truncate コマンドは、 行ではなくページ そして、トランザクション ログ内の行の代わりに、割り当てを解除するページのエントリを作成します。このコマンドは行ではなくページをロックします。したがって、必要なロックとリソースが少なくなります。テーブルが外部キーによって参照されている場合、またはインデックス付きビューに参加している場合は、truncate ステートメントを使用できないことに注意してください。
SQLの主キーと複合キー
次の構文は、テーブルからデータを削除する TRUNCATE コマンドについて説明しています。
TRUNCATE TABLE table_name;
DELETE と TRUNCATE の主な違い
次の点で、delete コマンドと truncate コマンドの違いについて説明します。
- DELETE ステートメントはテーブルから一部またはすべてのレコードを削除する場合に使用されますが、TRUNCATE ステートメントはテーブルから行全体を削除します。
- DELETE はテーブル データを変更するだけなので DML コマンドですが、TRUNCATE は DDL コマンドです。
- DELETE コマンドは、WHERE 句を使用してレコード/タプルをフィルタリングできます。ただし、TRUNCATE コマンドでは使用できません。 どこ したがって、切り捨て中に行をフィルタリングすることはできません。
- DELETE ですべてが有効になります トリガーの削除 テーブルの上で点火します。ただし、truncate 操作は個々の行に対して操作されないため、トリガーは起動されません。
- DELETE は、処理された順序でテーブルから一度に 1 行ずつ削除を実行します。ただし、TRUNCATE はテーブル データ全体を一度に削除するため、行ではなくデータ ページに対して動作します。
- DELETE ステートメントはレコードを削除するだけであり、レコードはリセットされません。 テーブルのアイデンティティ 一方、TRUNCATE は特定のテーブルの ID をリセットします。
- DELETE コマンドは、削除された行ごとにロックを取得するため、より多くのロックとデータベース リソースを必要とします。対照的に、TRUNCATE はデータ ページを削除する前にデータ ページのロックを取得します。したがって、必要なロックとリソースが少なくなります。
- DELETE ステートメントは、 トランザクションログ 一方、TRUNCATE は削除された行ごとに、各データ ページのトランザクション ログを記録します。
- TRUNCATEコマンドは もっと早く DELETE コマンドよりも行の代わりにデータ ページの割り当てが解除され、行の代わりにデータ ページがトランザクション ログに記録されるためです。
- TRUNCATE コマンドを使用してレコードを削除すると、元に戻すことはできません。対照的に、DELETE 操作で削除した削除データを復元できます。
DELETE と TRUNCATE の比較表
次の比較表は、それらの主な違いを簡単に説明しています。
比較基準 | 消去 | 切り詰める |
---|---|---|
意味 | delete ステートメントは、指定された条件に応じて既存のテーブルから 1 つまたは複数のレコードを削除するために使用されます。 | truncate コマンドは、既存のテーブルから完全なデータを削除しますが、テーブル自体は削除しません。テーブル構造またはスキーマが保持されます。 |
言語 | DML(データ操作言語)コマンドです。 | DDL(データ定義言語)コマンドです。 |
どこ | WHERE 句を使用して、テーブルの特定の行またはデータをフィルターできます。 | テーブルからレコードをフィルタリングするために WHERE 句は使用されません。 |
許可 | このコマンドを使用するには、DELETE 権限が必要です。 | このコマンドを使用するには、ALTER 権限が必要です。 |
働く | このコマンドはレコードを 1 つずつ削除します。 | このコマンドは、レコードを含むデータ ページ全体を削除します。 |
ロック | 削除する前に行をロックします。 | 削除する前にデータページをロックします。 |
テーブルのアイデンティティ | このコマンドはデータを削除するだけなので、テーブル ID はリセットされません。 | テーブルの ID は常にリセットされます。 |
取引 | 削除されたレコードごとにトランザクション ログが維持されます。 | 削除されたデータ ページごとのトランザクション ログは維持されません。 |
スピード | ログを保持しているため速度は遅いです。 | トランザクション ログを維持せずに一度にデータ全体を削除するため、実行は高速です。 |
引き金 | このコマンドは、テーブルに適用されたトリガーをアクティブにして、テーブルを起動させることもできます。 | このコマンドは、テーブルに適用されているトリガーを起動しません。 |
復元する | COMMIT または ROLLBACK ステートメントを使用して、削除されたデータを復元できるようになります。 | このコマンドを実行すると、削除されたデータを復元することはできません。 |
インデックス付きビュー | インデックス付きビューで使用できます。 | インデックス付きビューでは使用できません。 |
空間 | DELETE ステートメントは、削除された各行のログを保持するため、truncate ステートメントよりも多くのトランザクション スペースを占有します。 | TRUNCATE ステートメントは、各行ではなくデータ ページ全体のトランザクション ログを保持するため、占有するトランザクション領域が少なくなります。 |
結論
この記事では、delete ステートメントと truncate ステートメントを比較しました。テーブルからのレコードの削除をカスタマイズしたい場合は、DELETE コマンドを使用するという結論に達しました。 TRUNCATE コマンドは、テーブルにレコードやデータを残したくない場合、つまりテーブルを空にしたい場合に使用されます。