この文は、テーブル定義を削除しないでテーブルからすべてのローを削除するために使用します。
TRUNCATE TABLE [ owner.]table-name | MATERIALIZED VIEW [ owner.]materialized-view-name
TRUNCATE 文は、テーブルまたはマテリアライズド・ビューからすべてのローを削除します。
TRUNCATE TABLE 文はテーブルからすべてのローを削除するため、同期またはレプリケーションに関連するデータベースでは慎重に使用してください。この文は DELETE 文と似ていますが、WHERE 句を指定できません。ただし、TRUNCATE 文の結果としてトリガは発生しません。さらに、ローの削除はトランザクション・ログに入力されないため、同期またはレプリケーションが行われません。結果として、同期やレプリケーションが失敗するような矛盾が発生する可能性があります。
TRUNCATE 文を実行した後、オブジェクトのスキーマとすべてのインデックスは、DROP 文が発行されるまで引き続き存在します。スキーマ定義と制約はそのまま残り、トリガとパーミッションは有効なままです。
table-name には、ベース・テーブルまたはテンポラリ・テーブルの名前を指定できます。
TRUNCATE TABLE を使用すると、次の基準のすべてが満たされている場合に、高速方式のテーブル・トランケーションが実行されます。
そのテーブルへの外部キーも、そのテーブルからの外部キーも存在しない。
TRUNCATE TABLE 文がトリガ内で実行されない。
TRUNCATE TABLE 文がアトミック文の中で実行されない。
高速トランケーションが実行される場合、個々の DELETE はトランザクション・ログに記録されません。また、このオペレーションの前後に COMMIT が実行されます。スナップショット・トランザクション内では高速トランケーションを使用できません。スナップショット・アイソレーションを参照してください。
即時テキスト・インデックスが構築されているテーブルか、または即時ビューから参照されているテーブルで TRUNCATE TABLE を使用しようとすると、トランケーションが失敗します。即時テキスト・インデックス以外のインデックスとマテリアライズド・ビューでは、このようなことは発生しません。ただし、従属するインデックスやマテリアライズド・ビューのデータをトランケートしてからテーブルで TRUNCATE TABLE 文を実行し、その後、インデックスとマテリアライズド・ビューをリフレッシュすることを強くおすすめします。TRUNCATE 文とTRUNCATE TEXT INDEX 文を参照してください。
テーブル所有者であるか、DBA 権限またはテーブルに対する ALTER パーミッションが必要です。
ベース・テーブルとマテリアライズド・ビューの場合、TRUNCATE 文は、操作がアトミックであるため (すべてのローが削除されるか、まったくされないか)、テーブルへの排他的なアクセスが必要です。つまり、事前に開かれている、トランケートされるテーブルを参照するカーソルを閉じ、COMMIT または ROLLBACK を発行して、テーブルへの参照を解除します。
テンポラリ・テーブルの場合、各ユーザはデータの独自のコピーを所有しているため、TRUNCATE 文を実行するときに排他的アクセスは不要です。
マテリアライズド・ビューをトランケートする場合は、ビューのステータスを未初期化に変更します。マテリアライズド・ビューのステータスとプロパティを参照してください。
TRUNCATE 文は、トリガ削除を実行しません。
COMMIT は TRUNCATE 文の実行前後に実行されます。
ローの個々の削除はトランザクション・ログには記録されません。したがって、TRUNCATE オペレーションはレプリケートされません。SQL Remote レプリケーションまたは Mobile Link リモート・データベースでは、この文を使用しないでください。
テーブルに DEFAULT AUTOINCREMENT または DEFAULT GLOBAL AUTOINCREMENT と定義されたカラムがある場合、トランケーション操作はそのカラムの次に使用可能な値をリセットします。
SQL/2003 Transact-SQL 拡張。
Departments テーブルからすべてのローを削除します。
TRUNCATE TABLE Departments; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |