推奨されます, 2019

エディターズチョイス

SQLでのDELETEとTRUNCATEの違い

DELETEとTRUNCATEはリレーションからタプルを削除するために使用するコマンドですが、多くの文脈で異なります。 SQLでは、DELETEコマンドはデータ操作言語コマンドですが、TRUNCATEコマンドはデータ定義言語コマンドです。 しかし、DELETEとTRUNCATEを区別できるのは、DELETEはリレーションから指定されたタプルを削除できるのに対して、TRUNCATEコマンドはリレーションからタプル全体を削除するという点です。

ここで止めるべきではありません、DELETEとTRUNCATEの間には他にも多くの違いがあります。 以下に示す比較表を使ってそれらについて議論しましょう。

比較表

比較の基礎DELETE切り捨て
基本削除したいタプルを指定できます。関係からすべてのタプルを削除します。
言語DELETEはデータ操作言語のコマンドです。TRUNCATEはデータ定義言語コマンドです。
どこでDELETEコマンドはWHERE句を持つことができます。TRUNCATEコマンドにWHERE句がありません。
引き金DELETEコマンドはテーブルに適用されたトリガーをアクティブにしてそれらを起動させます。TRUNCATEコマンドは起動するトリガーを起動しません。
削除DELETEコマンドはタプルを一つずつ削除します。TRUNCATEは、タプルを含むデータページ全体を削除します。
ロックDELETEコマンドは、削除する前に行/タプルをロックします。TRUNCATEコマンドは、テーブルデータを削除する前にデータページをロックします。
速度DELETEコマンドはTRUNCATEと比較して遅くなります。TRUNCATEはDELETEに比べて高速です。
トランザクションDELETEは、削除されたタプルごとにトランザクションログを記録します。TRUNCATEは、削除された各データページのトランザクションログを記録します。
リストアDELETEコマンドの後にCOMMITまたはROLLBACKを続けることができます。TRUNCATEコマンドをROLLBACKにすることはできません。

DELETEの定義

DELETEデータ操作言語 (DML)コマンドです。 DELETEコマンドのタスクは、テーブルまたはリレーションからタプルを削除または削除することです。 DELETEを使用すると、リレーションからそのすべての属性値を使用して、タプル全体を削除できます。 DELETEは、リレーションからタプルの特定の属性の値を削除しません。

WHERE句を使用して、テーブルから削除するタプルをフィルタリングできます。 DELETE文にWHERE句を指定した場合は WHERE句の条件を満たすタプルのみが削除されます。 しかし、DELETE文でWHERE句を指定しないと 、デフォルトでは関係からすべてのタプルを削除または削除します。 DELETE文のWHERE句には、ネストしたSELECT-FROM-WHERE文を含めることができます。

DELETEコマンドの構文は次のとおりです。

table_nameの WHERE [ conditon ]からDELETE。

DELETEコマンドは一度に1つのリレーションまたはテーブルに対してのみ機能します。 異なるリレーションからタプルを削除したい場合は、それぞれに対して異なるDELETEコマンドを配置する必要があります。 しかし、1つのリレーションからタプルを削除すると、データベースの参照整合性に違反する可能があります。これは、トリガーを使用して解決できます。 DELETEコマンドが参照整合性に違反すると、削除されたタプルを参照する異なる関係のタプルに削除アクションを伝搬するすべての参照トリガー (指定されている場合)がアクティブになります。

DELETEコマンドは、最初に削除する行またはタプルをロックしてから、そのタプルを1つずつ削除します。 そのため、ロックとリソースが多くなり、遅くなりますCOMMITを使用してDELETEステートメントによって行われた変更を永続的にすることも、 ROLLBACKを使用してデータベースをリセットすることもできます

TRUNCATEの定義

TRUNCATEは、関係からタプルも削除するという点でDELETEコマンドに似ています。 違いは、関係からタプル全体を削除することです。 TRUNCATEコマンドが実行されると、テーブルのデータ全体が削除され、各タプルとそのすべての属性値がテーブルから削除されます。 しかし、tableの構造はまだデータベースに存在します。 だから、あなたは再びテーブルにタプルを入力することができます。 TRUNCATEはデータ定義言語コマンドです。

TRUNCATEコマンドの構文は次のとおりです。

table_nameを切り捨てます。

DELETEと同様に、TRUNCATEはテーブルデータを行ごとに処理しません。 代わりに、テーブルデータを格納しているデータページを操作します。 TRUNCATEがデータページを削除するとき、タプルの代わりにデータページのロックを取得する必要があります 。 したがって、DELETEと比較してTRUNCATEが速くなるロックおよびリソースの要件が少なくなります。

TRUNCATEコマンドを実行しても、データは行単位では操作されないため、 トリガ 起動されません。 テーブルが外部キーによって参照されている場合、TRUNCATEは実行できません。 TRUNCATEコマンドでテーブルデータを削除すると、元に戻すことはできません。

SQLにおけるDELETEとTRUNCATEの主な違い

  1. DELETEとTRUNCATEの主な違いは、DELETEを使用すると、指定したタプルをリレーションから削除できることです。 しかし、TRUNCATEを使用すると、関係からタプル全体が削除されます。
  2. DELETEはDMLコマンドですが、TRUNCATEはDDLコマンドです。
  3. DELETEはWHERE句を使用して、削除されるレコード/タプルをフィルタリングします。 ただし、TRUNCATEはすべてのタプルを削除するのでWHERE句を必要としないため、タプルをフィルタ処理する必要はありません。
  4. DELETEはテーブルに適用された参照トリガを起動します。 しかし、TRUNCATEはテーブルに対してトリガーを起動しません。
  5. DELETEコマンドは、テーブルからタプルを1つずつ削除します。順番に処理されます。 ただし、TRUNCATEはタプルを1つずつ操作するわけではありません。 代わりに、TRUNCATEはテーブルデータを格納するデータページを操作します。
  6. DELETEは削除する前にタプルのロックを取得しますが、TRUNCATEはデータページを削除する前にデータページのロックを取得します。
  7. TRUNCATEはDELETEコマンドに比べて高速です。
  8. DELETEは各タプルのトランザクションログを記録しますが、TRUNCATEは各データページのトランザクションログを記録します。
  9. TRUNCATEを使用してデータを削除すると、元に戻すことはできませんが、DELETEコマンドを使用して削除したデータを元に戻すことができます。

結論:

テーブルからのレコードの削除をカスタマイズしたい場合は、DELETEコマンドを使用できます。 テーブルを空にしたい、つまりテーブルにデータを残したくない場合は、TRUNCATEコマンドを使用します。

Top