ご存知のとおり、TRUNCATE はデータベースからテーブルの構造を削除せずにすべての行を削除します。 DELETE コマンドを使用して、テーブルからすべての行を削除することもできます。ただし、2 つのコマンド間の PRIMARY KEY AUTO_INCRMENT の再初期化には大きな違いがあります。
カラムが PRIMARY KEY CONSTRAINT を使用した AUTO_INCRMENT で定義されていると仮定すると、DELETE コマンドを使用してすべての行が削除されるとき、つまり新しい行が入力されるとき、AUTO_INCREMENT 番号が初期化テーブルは再初期化されません。最後に挿入された行から削除されます。対照的に、TRUNCATE を使用すると、テーブルは新しく作成されたテーブルと同様に再初期化されます。これは、TRUNCATE コマンドを使用して新しい行を挿入した後、AUTO_INCRMENT の数値が 1 から始まることを意味します。
次の例は、上記の概念を示します -
mysql> Create table Testing(Id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, Name Varchar(20)); Query OK, 0 rows affected (0.15 sec) mysql> Insert into testing(Name) values('Gaurav'),('Rahul'),('Aarav'),('Yashraj'),('Manak'); Query OK, 5 rows affected (0.09 sec) Records: 5 Duplicates: 0 Warnings: 0 mysql> Select * from testing; +----+---------+ | Id | Name | +----+---------+ | 1 | Gaurav | | 2 | Rahul | | 3 | Aarav | | 4 | Yashraj | | 5 | Manak | +----+---------+ 5 rows in set (0.00 sec) mysql> Delete from testing where id >=4; Query OK, 2 rows affected (0.04 sec) mysql> Select * from testing; +----+--------+ | Id | Name | +----+--------+ | 1 | Gaurav | | 2 | Rahul | | 3 | Aarav | +----+--------+ 3 rows in set (0.00 sec) mysql> Insert into testing(Name) values('Harshit'),('Lovkesh'); Query OK, 2 rows affected (0.06 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> Select * from testing; +----+---------+ | Id | Name | +----+---------+ | 1 | Gaurav | | 2 | Rahul | | 3 | Aarav | | 6 | Harshit | | 7 | Lovkesh | +----+---------+ 5 rows in set (0.00 sec) mysql> Truncate table testing; Query OK, 0 rows affected (0.10 sec) mysql> Insert into testing(Name) values('Harshit'),('Lovkesh'),('Ram'),('Gaurav'); Query OK, 4 rows affected (0.11 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> Select * from testing; +----+---------+ | Id | Name | +----+---------+ | 1 | Harshit | | 2 | Lovkesh | | 3 | Ram | | 4 | Gaurav | +----+---------+ 4 rows in set (0.00 sec)
以上がMySQL の TRUNCATE コマンドと DELETE コマンドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。