MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのTRUNCATEとDROPコマンドの違いとは?構造とデータへの影響を徹底解説

MySQLにおけるTRUNCATEとDROPの最大の違い

MySQLのTRUNCATEコマンドとDROPコマンドの最も重要な違いは、テーブル構造を保持するかどうかという点にあります。

  • TRUNCATE:テーブル内の全データ(行)を削除しますが、テーブル自体の構造はそのまま残ります。また、AUTO_INCREMENTのカウンターも初期化されます。
  • DROP:テーブルのデータだけでなく、テーブル構造そのものもデータベースから完全に削除します。

それぞれのコマンドを実行した後の挙動を、実際の例で確認してみましょう。

検証用テーブルの作成とデータ投入

まず、「testing」というテーブルを作成し、サンプルデータを挿入します。

mysql> Create table testing(id int PRIMARY KEY NOT NULL AUTO_INCREMENT,Name Varchar(20));
Query OK, 0 rows affected (0.24 sec)

mysql> Insert into testing(Name) Values('Ram'),('Mohan'),('John');
Query OK, 3 rows affected (0.12 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> Select * from testing;
+----+-------+
| id | Name  |
+----+-------+
| 1  | Ram   |
| 2  | Mohan |
| 3  | John  |
+----+-------+
3 rows in set (0.00 sec)

この時点で、id列はPRIMARY KEYかつAUTO_INCREMENTが設定されています。

TRUNCATE実行後の状態

TRUNCATEコマンドで「testing」テーブルの中身を空にしても、テーブル構造はデータベース内に残り、PRIMARY KEYやAUTO_INCREMENTの設定も維持されます。さらに、AUTO_INCREMENTの値は1に初期化されるため、次に挿入する行のidは再び1から始まります。

mysql> Truncate table testing;
Query OK, 0 rows affected (0.04 sec)

mysql> DESCRIBE testing;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| Name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.21 sec)

DESCRIBEの結果を見ると、テーブル定義が完全に残っていることがわかります。

DROP実行後の状態

一方、DROPコマンドを実行すると、テーブルのデータだけでなく構造そのものもデータベースから削除されます。そのため、その後テーブルを参照しようとするとエラーが発生します。

mysql> Drop table testing;
Query OK, 0 rows affected (0.08 sec)

mysql> DESCRIBE testing;
ERROR 1146 (42S02): Table 'query.testing' doesn't exist

「Table doesn't exist(テーブルが存在しない)」というエラーが出ることから、テーブルが完全に消去されたことが確認できます。

まとめ:使い分けのポイント

項目TRUNCATEDROP
データの削除全行削除全行削除
テーブル構造保持される削除される
AUTO_INCREMENT初期化される―(テーブルごと消失)
主な用途テーブルを再利用しつつ中身だけ空にしたい場合テーブル自体が不要になった場合

このように、テーブルを今後も使い続けるならTRUNCATE、テーブル自体が不要ならDROPという使い分けが基本です。どちらのコマンドも元に戻せない破壊的な操作なので、実行前には必ずバックアップを取ることをおすすめします。

  1. MySQLのTINYINT(1)とブール型(BOOLEAN)の違いとは?

    結論から言うと、TINYINT(1)とブール型(BOOLEAN)の間に違いはありません。MySQLでは、BOOLまたはBOOLEANというキーワードは内部的にTINYINT(1)へと変換されます。つまり、BOOLやBOOLEANはTINYINT(1)の別名(シノニム)として扱われるのです。それでは、実際にテーブルを作成して確認してみましょう。BOOLEAN型でテーブルを作成するmysql> create table DemoTable ( isMarried Boolean ); Query OK, 0 rows affected (1.77 sec)次に、作成したテーブルの構造

  2. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (