2007年6月4日月曜日

テーブルを空にする場合

良くあると思うので書いておく。
DELETE FROMとは違うので注意。

TRUNCATE TABLE table_name

3.23 では、TRUNCATE TABLE は COMMIT; DELETE FROM table_name にマップされる。 See 項6.4.5. 「DELETE 構文」。

TRUNCATE TABLE は次の点で DELETE FROM ... と異なります。

*切り捨て操作では、テーブルが破棄され、再作成される。この操作は、レコードを 1 つずつ削除するよりはるかに迅速に処理される。
*切り捨て操作はトランザクションセーフではない。アクティブなトランザクションやアクティブなテーブルのロックがあると、エラーになる。
*削除されたレコード数は返されない。
*テーブル定義ファイル table_name.frm が有効である限り、データやインデックスのファイルが破損しても、この方法でテーブルを再作成できる。

TRUNCATE TABLE は Oracle の SQL 拡張です。 このステートメントは MySQL 3.23.28 で追加されました。ただし、3.23.28 〜 3.23.32 では、キーワード TABLE を省略する必要があります。