コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「TRUNCATE (SQL)」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m ボット: 言語間リンク 6 件をウィキデータ上の (d:Q2664576 に転記)
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
12行目: 12行目:
== 構文 ==
== 構文 ==


<source lang="sql">
<syntaxhighlight lang="sql">
TRUNCATE [TABLE] テーブル名 [, テーブル名]
TRUNCATE [TABLE] テーブル名 [, テーブル名]
</syntaxhighlight>
</source>


多くのデータベース製品では <code>TABLE</code> は省略可能である。
多くのデータベース製品では <code>TABLE</code> は省略可能である。

2020年7月5日 (日) 23:01時点における版

TRUNCATE または TRUNCATE TABLE ステートメントは、テーブルから全てのを削除するSQLである。データベースが持つ整合性を維持する機構をスキップすることで高速な削除を実現している場合が多い。削除する行それぞれを記録するためのトランザクションログの出力を避けることで、効率的に全ての行を削除できる。

TRUNCATE TABLE 表名」は「DELETE FROM 表名」とほぼ等価だが、以下の点で異なる。

  • WHERE 句を指定できない。全ての行は一括削除される。
  • 対象のテーブルの排他ロックを取得する。
  • 外部キーで参照されるテーブルに対しては実行できない。外部キーによる整合性の確認を行わないためである。
  • Oracle DatabaseMySQL の一部のストレージエンジンでは、TRUNCATE 後、自動的にコミットが行われる。TRUNCATE による削除はロールバックできない。
    • PostgreSQL のように、TRUNCATE をトランザクション内で実行でき、ロールバックも可能なデータベースも存在する。対象のテーブルを「古いバージョン」としてトランザクションの完了時まで保持することで実現されている。
  • Microsoft SQL Server では TRUNCATE TABLE ステートメントはレプリケーションやログシッピングの対象となっているテーブルに対して実行できない。どちらも遠隔のデータベースの一貫性を保つためにトランザクションログを利用しているためである。

構文

TRUNCATE [TABLE] テーブル名 [, テーブル名]

多くのデータベース製品では TABLE は省略可能である。