MySQL TRUNCATE TABLE

时间:2019-11-20 08:52:10  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用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语句有效地删除表中的所有数据,尤其是对于大型表。