MySQL TRUNCATE TABLE
简介:在本教程中,您将学习如何使用MySQL TRUNCATE TABLE语句删除表中的所有数据。
MySQL TRUNCATE TABLE语句简介
MySQL TRUNCATE TABLE语句允许您删除表中的所有数据。
从逻辑上讲,TRUNCATE TABLE语句就像没有WHERE子句的DELETE语句,该子句从表或DROP TABLE和CREATE TABLE语句序列中删除所有行。
但是,TRUNCATE TABLE语句比DELETE语句更有效,因为它可以删除并重新创建表,而不是一一删除行。
这是TRUNCATE TABLE语句的基本语法:
TRUNCATE [TABLE] table_name;
使用这种语法,您可以在TRUNCATE TABLE关键字之后指定要删除所有数据的表的名称。
TABLE关键字是可选的。
但是,最好使用TABLE关键字来区分TRUNCATE TABLE语句和TRUNCATE()函数。
如果其他表引用了您要截断的表的任何FOREIGN KEY约束,则TRUNCATE TABLE语句将失败。
由于截断操作会导致隐式提交,因此无法回滚。
如果表具有AUTO_INCREMENT列,则TRUNCATE TABLE语句会将AUTO_INCREMENT列中的值重置为其初始值。
TRUNCATE TABLE语句不会触发与被截断的表关联的DELETE触发器。
与DELETE语句不同,TRUNCATE TABLE语句影响的行数为0,应将其解释为无信息。
MySQL TRUNCATE TABLE示例
让我们举一个使用TRUNCATE TABLE语句的示例。
首先,为演示创建一个名为books的新表:
CREATE TABLE books ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL ) ENGINE=INNODB;
接下来,使用以下存储过程将虚拟数据插入books表:
DELIMITER $$ CREATE PROCEDURE load_book_data(IN num INT(4)) BEGIN DECLARE counter INT(4) DEFAULT 0; DECLARE book_title VARCHAR(255) DEFAULT ''; WHILE counter < num DO SET book_title = CONCAT('Book title #',counter); SET counter = counter + 1; INSERT INTO books(title) VALUES(book_title); END WHILE; END$$ DELIMITER ;
然后,将10,000行加载到books表中。
需要一些时间。
CALL load_book_data(10000);
之后,检查books表中的数据:
SELECT * FROM books;
最后,使用TRUNCATE TABLE语句从books表中删除所有行:
TRUNCATE TABLE books;
请注意,您可以比较TRUNCATE TABLE和DELETE语句之间的性能。
在本教程中,您学习了如何使用MySQL TRUNCATE TABLE语句有效地删除表中的所有数据,尤其是对于大型表。