MySQL TRUNCATE TABLE

摘要:在本教程中,您将学习如何使用 MySQL TRUNCATE TABLE语句删除表中的所有数据。

MySQL TRUNCATE TABLE语句简介

MySQL TRUNCATE TABLE语句允许您删除表中的所有数据。

从逻辑上讲, TRUNCATE TABLE语句类似于不带WHERE子句的DELETE语句(从表中删除所有行)或一系列DROP TABLECREATE TABLE语句。

但是, TRUNCATE TABLE语句比DELETE语句更有效,因为它删除并重新创建表,而不是逐一删除行。

以下是TRUNCATE TABLE语句的基本语法:

TRUNCATE [TABLE] table_name;Code language: SQL (Structured Query Language) (sql)

在此语法中,您可以指定要删除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;Code language: SQL (Structured Query Language) (sql)

接下来,使用以下存储过程将虚拟数据插入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 ;
Code language: SQL (Structured Query Language) (sql)

然后,将 10,000 行加载到books表中。这需要一段时间。

CALL load_book_data(10000);Code language: SQL (Structured Query Language) (sql)

之后查看books表中的数据:

SELECT * FROM books;Code language: SQL (Structured Query Language) (sql)

最后,使用TRUNCATE TABLE语句删除books表中的所有行:

TRUNCATE TABLE books;Code language: SQL (Structured Query Language) (sql)

请注意,您可以比较TRUNCATE TABLEDELETE语句之间的性能。

在本教程中,您学习了如何使用 MySQL TRUNCATE TABLE语句有效地删除表中的所有数据,尤其是对于大型表。

本教程有帮助吗?