MySQL 截断表语句

在 MySQL 数据库中,截断(TRUNCATE)是指将表中的所有数据删除,并且重置表的自增 id。这个操作与删除表中的全部数据(DELETE)有一些区别,主要在于 TRUNCATE 语句执行的速度更快,因为它并不是逐条删除,而是直接删除数据。但是,TRUNCATE 操作是不能回滚的,并且在执行时会重置表的自增 id,可能会对使用这个 id 来作为外键引用的其他表造成影响。
语法
MySQL 截断表的语法如下:
TRUNCATE TABLE table_name;
其中,table_name 是需要截断的表的名称。
示例
首先,我们创建一个名为 students 的表,并插入一些数据:
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT
);
INSERT INTO students (name, age) VALUES ('Alice', 20);
INSERT INTO students (name, age) VALUES ('Bob', 22);
INSERT INTO students (name, age) VALUES ('Cathy', 21);
现在,我们可以使用 TRUNCATE 语句来截断 students 表:
TRUNCATE TABLE students;
执行上面的 TRUNCATE 语句后,students 表中的所有数据会被删除,并且自增 id 会被重置。可以使用 SELECT * FROM students; 查询表,确认数据已被删除。
注意事项
在使用 TRUNCATE 语句时,需要注意以下几点:
- TRUNCATE 会删除表中的所有数据,包括所有的行和索引,并且重置自增 id。
- TRUNCATE 是 DDL(数据定义语言)语句,不是 DML(数据操作语言)语句,因此它不会被记录在 MySQL 的日志中,也不能回滚。一旦执行了 TRUNCATE,数据将无法恢复。
- TRUNCATE 操作相对于 DELETE 更快,因为它是直接删除数据的操作,而不是逐条删除。
- TRUNCATE 也有一些限制,例如不能用于视图(VIEW)、不能用于被其他表参照的外键等。
因此,在使用 TRUNCATE 语句时需要慎重考虑,确保数据删除的操作是正确的和不可逆的。
极客笔记