テーブルのオートフィールドをリセットします.

1659 ワード

先ほどデータを転送する時に使うものです.インターネットで調べてみました.ここでメモします.
 
--      
truncate table tb_producttype --truncate           
--         
DBCC CHECKIDENT (tb_producttype,reseed,0) 
 
リセットする前に元のテーブルのデータを削除します.また、truncateで元のテーブルのデータを削除すると、この表は外部キーの関係がありません.
 
truncate tableコマンドは、データテーブルのすべてのレコードを素早く削除しますが、データテーブル構造を保持します.このような急速な削除はdelete fromデータテーブルの削除と全部のデータテーブル記録と違って、deleteコマンド削除のデータはシステムロールバックに格納されます.必要な時、データはロールバックして回復できます.truncateコマンド削除のデータは回復できないので、テストをして増加フィールドがあるテーブルを作ってもいいです.100万のデータを入れて、それぞれTRUNCATEとDELETEでデータを削除してから表に挿入します.一番直観的なのは、1.TRUNCATE TABLEはとても速いです.2.TRUNCATE以降の増加フィールドは最初から数え始めました.DELETEは元の最大値をそのまま残しています.…………………………………………………………………………………ここで言うdeleteとは、where子文を持たないdelete文と同じ点truncateと、where子文を持たないdeleteのことです.およびdropはテーブル内のデータの違いを削除します.1.truncateとdeleteはデータだけを削除してテーブルの構造を削除しません.(定義)    drop文は表の構造を削除することを依存する制約、トリガー、インデックス(index);この表に依存する格納プロセス/関数は保存されますが、invalid状態になります.
 2.delete文はdmlで、この操作はrollback segementに入れます.事務提出後に有効になります.該当するtriggerがあれば、実行時にトリガされます.   truncate、dropはddlで、操作はすぐに有効になります.元のデータはrollback segmentに入れないと、スクロールできません.操作はtriggerをトリガしません.
3.delete文は表の占用するextentに影響しないで、高い水線(higwatermark)はもとの位置を維持して動かないです.  明らかにdrop文は表の占有空間を全部解放します.  truncate文がデフォルトの場合は、reuse storgeを使用しない限り、minextetsのextentに空間放出される.   truncateはハイラインをリセットします.
4.速度は、一般的に、drop>;truncate>;delete
5.安全性:dropとtruncateを注意して使用してください.特にバックアップがないときは泣きが来ても使えません.一部のデータ行用deleteを削除したいです.where子文を持ってきてください.ロールバックは十分大きいです.テーブルを削除したいです.もちろんdropでデータをすべて削除します.果物と事務は関係なく、truncateを使ってもいいです.事務と関連があれば、またはtriggerを触発したいです.やはりdeleteを使います.テーブル内部の破片を整理するなら、truncateでreuse strogeについてきて、データを再導入/挿入してもいいです.