MySQL 5.1 リファレンスマニュアル :: 12 SQL ステートメント構文 :: 12.2 データ取り扱いステートメント :: 12.2.9 TRUNCATE 構文
« 12.2.8.11 MySQL 初期バージョンにおいて、サブクエリの接合としての書き換え

12.2.10 UPDATE 構文 »
Section Navigation      [Toggle]
  • 12.2 データ取り扱いステートメント
  • 12.2.1 DELETE 構文
  • 12.2.2 DO 構文
  • 12.2.3 HANDLER 構文
  • 12.2.4 INSERT 構文
  • 12.2.5 LOAD DATA INFILE 構文
  • 12.2.6 REPLACE 構文
  • 12.2.7 SELECT 構文
  • 12.2.8 サブクエリ構文
  • 12.2.9 TRUNCATE 構文
  • 12.2.10 UPDATE 構文

12.2.9. TRUNCATE 構文

TRUNCATE [TABLE] tbl_name

TRUNCATE TABLE はテーブルを完全に空にします。論理的には、これは全ての行を削除する DELETE ステートメントと同等ですが、いくつかの条件下では、違いがあります。

もしテーブルを参照する外部キー制約があれば、InnoDB テーブルに対しては、TRUNCATE TABLE が DELETE にマップされ、そうでなければ、高速切断(テーブルのドロップと再作成)が利用されます。外部キー制約の有無に関わらず、AUTO_INCREMENT カウンタが TRUNCATE TABLE によってリセットされます。

その他のストレージ エンジンに対しては、MySQL 5.1 の中では次のような方法で、TRUNCATE TABLE と DELETE が異なっています。

  • 切り捨て操作は、テーブルをドロップ、再作成します。それは、行を1つ1つ削除するよりも処理が速くできます。

  • 切り捨て操作はトランザクション セーフではありませんので、実行中のトランザクションやテーブル ロックの途中で行おうとするとエラーが発生します。

  • 削除された行数は返されません。

  • テーブル フォーマット ファイル tbl_name.frm が有効である限り、データやインデックス ファイルが破損しても、テーブルは TRUNCATE TABLE を利用して空のテーブルとして再作成する事ができます。

  • テーブル ハンドラは最後に利用された AUTO_INCREMENT 値を記憶していませんが、また最初から数えます。通常はシーケンス値を再利用しない MyISAM と InnoDB にも同じ事が言えます。

  • パーティション テーブルと共に利用される時には、 TRUNCATE TABLE はその分割を保管します。それは、パーティション定義(.par)ファイルは影響を受けませんが、データとインデックス ファイルはドロップされ、再作成されるという意味です。

  • テーブルの切捨てが DELETE を利用しない為、TRUNCATE ステートメントは ON DELETE トリガを呼び出しません。

TRUNCATE TABLE は、MySQL 5.1.16 以降から DROP 権限を必要とします。(5.1.16 以前では DELETE 権限を必要としています。

TRUNCATE TABLE は MySQL に導入されたオラクル SQL 拡張子です。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates