摘要:在本教程中,您将学习如何使用 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;
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 TABLE
与DELETE
语句之间的性能。
在本教程中,您学习了如何使用 MySQL TRUNCATE TABLE
语句有效地删除表中的所有数据,尤其是对于大型表。