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

MySQLのDROP TABLEはテーブルを完全に削除する?構造だけ残すTRUNCATEとの違いを徹底解説

MySQLのDROP TABLEとTRUNCATE TABLEの違いとは

MySQLにおけるDROP TABLEコマンドは、テーブルを完全に削除します。テーブル内のすべてのデータに加え、テーブル自体の構造(定義)も削除されるため、実行後はテーブルが存在しない状態になります。

一方、TRUNCATE TABLEコマンドを使用すると、データはすべて削除されますが、テーブルの構造は保持されます。つまり、空のテーブルが再作成されたような状態になります。

この記事では、それぞれのコマンドの動作を実際のSQL例を交えて詳しく確認していきます。

DROP TABLEの動作を確認してみよう

まずは、動作確認用のサンプルテーブルを作成します。

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(20)
    );
Query OK, 0 rows affected (0.20 sec)

次に、INSERT文でいくつかレコードを挿入します。

mysql> insert into DemoTable(Name) values('Larry');
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.05 sec)

SELECT文で全レコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Larry |
| 2  | Chris |
+----+-------+
2 rows in set (0.00 sec)

DROP TABLEを実行した結果

ここで、DROP TABLEコマンドを実行します。実行後はデータだけでなく、テーブル構造そのものも削除されます。

mysql> DROP TABLE DemoTable;
Query OK, 0 rows affected (0.18 sec)

この状態でSELECT文を実行すると、以下のようなエラーが発生します。

mysql> select *from DemoTable;
ERROR 1146 (42S02): Table 'hb_student_tracker.DemoTable' doesn't exist

さらに、DESCコマンドでテーブル構造を確認しようとしても、同様にエラーとなります。

mysql> desc DemoTable;
ERROR 1146 (42S02): Table 'hb_student_tracker.DemoTable' doesn't exist

このように、DROP TABLEはテーブルの存在そのものを消し去るため、再度使用する場合はCREATE TABLEで作り直す必要があります。

TRUNCATE TABLEの動作を確認してみよう

次に、TRUNCATEコマンドの挙動を確認します。まず新しいテーブルを作成します。

mysql> create table DemoTable
   (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(20)
   );
Query OK, 0 rows affected (0.63 sec)

レコードを挿入します。

mysql> insert into DemoTable(FirstName) values('Chris');
Query OK, 1 row affected (0.08 sec)

mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.07 sec)

現在のデータを確認します。

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | Chris     |
| 2  | Robert    |
+----+-----------+
2 rows in set (0.00 sec)

TRUNCATE TABLEを実行した結果

TRUNCATE TABLEコマンドを実行します。実行後はデータがすべて削除され、テーブル構造のみが残ります。

mysql> TRUNCATE TABLE DemoTable;
Query OK, 0 rows affected (0.06 sec)

この状態でSELECT文を実行すると、データは空ですがエラーにはなりません。

mysql> select *from DemoTable;
Empty set (0.00 sec)

DESCコマンドでテーブル構造を確認すると、構造はきちんと保持されていることがわかります。

mysql> desc DemoTable;

実行結果:

+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| Id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| FirstName | varchar(20) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

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

  • DROP TABLE:テーブルのデータと構造の両方を完全に削除する。テーブル自体がなくなるため、復元や参照は不可能。
  • TRUNCATE TABLE:データだけを全件削除し、テーブル構造はそのまま維持する。テーブルを空の状態で使い続けたい場合に最適。

なお、大量のデータを削除する場合、TRUNCATEはDELETE文よりも高速に動作するという特徴もあります。用途に応じて、これらのコマンドを適切に使い分けることで、安全かつ効率的なデータベース運用が可能になります。

  1. MySQLでテーブルの値をシャッフルする方法:RAND()関数を使ったランダム並び替え

    MySQLでテーブル内の値(行)の順序をランダムに入れ替えたい場合は、RAND()関数とORDER BY句を組み合わせることで簡単に実現できます。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable792 ( Name varchar(100), Subject varchar(100) ); Query OK, 0 rows affected (0.66 sec)レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql> insert into DemoTable79

  2. MySQLテーブルからインデックスを削除する方法

    MySQLのテーブルから不要になったインデックスを削除したい場合、ALTER TABLE文とDROP INDEX句を組み合わせて使用します。この記事では、実際のSQL実行例を交えながら、インデックスを削除する手順をわかりやすく解説します。 インデックスを削除する基本構文 MySQLテーブルからインデックスを削除する際の基本構文は以下の通りです。 ALTER TABLE テーブル名 DROP INDEX `インデックス名`; インデックス名にスペースが含まれる場合は、バッククォート(`)で囲む点に注意してください。 ステップ1:サンプルテーブルを作成する まずは動作確認用のテーブルを作成しま