ベストアンサー
まず、「フィールドを切り捨てることはできません」。
切り捨ては削除ステートメントや更新のようなものではないデータベースの概念。 Truncateの主な概念は、舞台裏のメタデータがどのように処理されるかです。 Oracleを使用している場合は、「最高水準点」と呼ばれる概念を学ぶことができます。詳細については、Burlesonのブログをご覧ください。
SQLサーバー自動インクリメント値を持つ主キーについて考える場合は、切り捨ててすべてをベースに設定します。つまり、ユーザーまたはデフォルト1で定義された開始値を意味します。したがって、基本的に、バックエンドで実行される操作は、メタデータに固有であり、データベースのテーブルレベルのプロパティに固有です。
これで、If列をクリーンアップしたいということは、その特定の列に対してNULLで更新を実行するか、 で更新できることを意味します。
Update TABLE
Set Column = NULL/’’
Where 1 =1
最後に言及した場所現在、多くのデータベースではwhere句なしで列全体を更新できないためです。 mySql では、「セーフアップデートフラグ」と呼ばれていました。ただし、より具体的には、グッドプラクティスに従うために、常に「」ではなくNULLで更新してください。
回答
DELETEは、行ごとにログに記録される操作です。これは、各行の削除が記録され、物理的に削除されることを意味します。外部キーやその他の制限を残したまま、制限違反を伴わない行を削除できます。
TRUNCATEはログに記録される操作ですが、方法が異なります。 TRUNCATEは、情報が存在する情報ページの取引場所をログに記録します。情報ページの割り当て解除は、情報行が実際には情報ページにまだ存在しているが、拡張機能は再利用のために空としてマークされていることを意味します。これにより、TRUNCATEはDELETEよりも高速な操作を実行できます。外部キー制約があるテーブルを切り捨てることはできません。制約を削除し、テーブルを切り捨てて、制約を再適用する必要があります。
TRUNCATEは、ID列をデフォルト値の初期化にリセットします。これは、ID列のあるテーブルがあり、シード値が1の264行がある場合、その最新のレコードのIDの列に値264(値1から開始したと仮定)が含まれることを意味します。空のテーブルに新しいレコードを挿入するときにテーブルを切り捨てた後、ID列の値は1になります。DELETEはしません。同じシナリオで、現在の行の場合、空のテーブルに新しい行を挿入します。 、ID列の値は265です。
削除よりも切り捨てが速いのはなぜですか?
理由:ですべての情報を削除するための書き込みは、ロールバックテーブルスペースにコピーされてから削除操作が実行されます。したがって、テーブルを削除した後にROLLBACKと入力すると、情報を取得できます(メソッドはロールバックテーブルのペースで取得します)。この手法には時間がかかりますが、TRUNCATEを使用すると、情報をロールバックテーブルスペースにコピーせずに直接削除するため、TRUNCATEの方が高速です。2回切り捨てると、情報を取り戻すことができません。