TRUNCATE
ドロップする方法の違いは何ですか?
私はそれがテーブル内のすべてのデータを削除すると思いますが、テーブル名をデータベースに保持し、そこでDROP
すべてのデータとテーブルを削除します。これは正しいです ?
TRUNCATE
ドロップする方法の違いは何ですか?
私はそれがテーブル内のすべてのデータを削除すると思いますが、テーブル名をデータベースに保持し、そこでDROP
すべてのデータとテーブルを削除します。これは正しいです ?
回答:
削除-データ操作言語(DML)
DELETE
RDBMS内のステートメントは、DMLステートメントと見なされます。CRUD(作成、読み取り、更新、削除)とも呼ばれるこの種のステートメントは、オブジェクトの基本構造に影響を与えずにデータベース内のデータを操作することを目的としています。これが実際に意味するところは:
DELETE
声明は、のいずれかを介して述語を使用して微調整することができWHERE
たりJOIN
、テーブル内の一部またはすべての行を削除します。DELETE
文は、データベースによって記録され、文が失敗した場合、トランザクション内でロールバックすることができます。DELETE
は削除されたデータに対して行レベルのロックをかけますが、これは必要に応じてさらに高くなる可能性があります。DELETE
「遅い」(これは相対的なものです)可能性がありますが、粒度が細かいため安全です。切り捨て-データ定義言語(DDL)
TRUCNATE
DDLステートメントと見なされます。つまり、データベースでのオブジェクトの定義方法を変更することを目的としています。通常、DDL文はCREATE
、ALTER
、またはDROP
が、TRUNCATE
すべての行を削除することによって、テーブルを「resettting」のことを、特定の目的を果たします。この方法はRDBMSエンジン間で異なり、MySQLの詳細を確認することをお勧めします。aの実際的な影響は次のTRUNCATE
とおりです。
TRUNCATE
きめの細かいことはできません。成功すると、テーブルからすべての行が削除されます。TRUNCATE
通常は記録されません。これはRDBMSによって異なりますが、MySQLがどのように処理するかをより具体的に確認することをお勧めします。(ヒント、バージョンによって異なります。)TRUNCATE
実行するには、テーブルメタデータロックが必要です。これが実際にどのように実装されるかはRDBMSに固有ですがTRUNCATE
、DDLを実行するために、プロセスは基本的に他のプロセスがテーブルに干渉しないようにする必要があります。TRUNCATE
はよりも高速ですがDELETE
、安全性は低くなります。ドロップテーブル-データ定義言語(DDL)
DROP TABLE
TRUNCATE
実際にデータベースからテーブルを完全に削除するという点でaよりもさらに進んでいます。これには、インデックスや制約など、関連するすべてのオブジェクトの削除が含まれます。テーブルを削除すると、すべてのデータが削除されるだけでなく、構造も削除されます。これは通常、テーブルが不要になったときに行われます。主な懸念事項は、a DROP
はDDLであるため、通常は元に戻せないことです。一部のRDBMSエンジンでは、DDLをトランザクション内にラップしてロールバックできるようにしますが、これはベストプラクティスとは見なされず、回避する必要があります。
MySQLについて話すことはできませんが、Oracleでの切り捨てと削除のいくつかの側面を比較した簡単な表を次に示します。
truncate | delete
--------------------------------- | ---------------------------
DDL (implicitly commits, | DML
including any pending DML) |
Does not generate undo info | Generates undo info
(rollback statements) | (rollback statements)
Resets high water mark in table | Does not affect full-scan
and all indexes, improving | performance
full-scan performance |
Does not fire any delete triggers | Fires delete triggers
Priv to truncate cannot be granted | --
to truncate another user's |
table; DROP ANY TABLE system |
priv required |
Storage for table and indexes can | Never shrinks the size of a
be set to initial size | table or indexes
Cannot truncate parent table from | --
an established referential |
integrity constraint; must |
first disable foreign key |
that references the parent |
table |
この本から編集された情報:http : //amzn.com/0470395125
うまくいけば、これは、私がしたように、このページを偶然見つけたすべてのOracleユーザーを助けるかもしれません。MySQLでこれらのポイントのうちどれが当てはまるかを指摘してください。