MySQL には、テーブル内のデータを削除するための DELETE および TRUNCATE キーワードが用意されています。以下では、主に TRUNCATE キーワードの使用について説明します。
TRUNCATE キーワードは、テーブルを完全に空にするために使用されます。その構文形式は次のとおりです。
TRUNCATE [TABLE] 表名
このうち、TABLE キーワードは省略できます。
例 1
新しいテーブル tb_student_course を作成し、データとクエリを挿入します。SQL ステートメントと実行結果は次のとおりです。
mysql> CREATE TABLE `tb_student_course` (
-> `id` int(4) NOT NULL AUTO_INCREMENT,
-> `name` varchar(25) NOT NULL,
-> PRIMARY KEY (`id`)
-> );
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO tb_student_course(name) VALUES ('Java'),('MySQL'),('Python');
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tb_student_course;
+----+--------+
| id | name |
+----+--------+
| 1 | Java |
| 2 | MySQL |
| 3 | Python |
+----+--------+
3 rows in set (0.00 sec)
TRUNCATE ステートメントを使用して、tb_student_course テーブルのレコードをクリアします。SQL ステートメントと実行結果は次のとおりです。
mysql> TRUNCATE TABLE tb_student_course;
Query OK, 0 rows affected (0.04 sec)
mysql> SELECT * FROM tb_student_course;
Empty set (0.00 sec)
TRUNCATE と DELETE の違い
論理的に言えば、TRUNCATE ステートメントは DELETE ステートメントと同じ効果がありますが、場合によっては、2 つのステートメントが異なる方法で使用されます。
- DELETE は DML タイプのステートメントであり、TRUNCATE は DDL タイプのステートメントです。これらは、テーブル内のデータをクリアするために使用されます。
- DELETE はレコードを 1 行ずつ削除します。TRUNCATE は元のテーブルを直接削除し、テーブル内のデータを行ごとに削除するのではなく、同一の新しいテーブルを再作成し、DELETE よりも高速にデータを実行します。したがって、テーブル内のすべてのデータ行を削除する必要がある場合は、TRUNCATE ステートメントを使用して実行時間を短縮してください。
- DELETE がデータを削除した後、データはイベント ロールバックで取得できます。TRUNCATE はトランザクション ロールバックをサポートしておらず、削除後にデータを取得することはできません。
- DELETE がデータを削除した後、システムは自己インクリメント フィールドのカウンターをリセットしません。TRUNCATE がテーブル レコードをクリアした後、システムは自己インクリメント フィールドのカウンターをリセットします。
- DELETE は、WHERE 句で条件を指定して一部のデータを削除できるため、より広く使用されていますが、TRUNCATE は WHERE 句をサポートしておらず、全体を削除することしかできません。
- DELETE は削除された行数を返しますが、TRUNCATE は無意味な 0 しか返しません。
要約する
テーブルが不要な場合は DROP を使用し、テーブルは保持したいがすべてのレコードを削除したい場合は TRUNCATE を使用し、いくつかのレコードを削除したい場合は DELETE を使用します。
ダーク ホース プログラマー MySQL データベース エントリから習熟まで、mysql のインストールから高度な mysql まで、mysql の最適化をすべて網羅