当我们需要清空一个表中的所有行时,除了使用
DELETE * FROM table
还可以使用
TRUNCATE TABLE
语句。
如果想要清空一个表,
TRUNCATE TABLE
语句比 DELETE语句更加有效。
TRUNCATE TABLE 语法
TRUNCATE TABLE
的语法很简单,如下:
TRUNCATE [TABLE] table_name;
其中
TABLE
关键字是可选的。也就是说,
TRUNCATE t;
和
TRUNCATE TABLE t;
是等效的。
TRUNCATE TABLE
语句相当于先将此表删除,再创建一个新表。
TRUNCATE TABLE
语句需要对操作的表具有
DROP
权限。
TRUNCATE 与 DELETE 不同
虽然
TRUNCATE
与
DELETE
类似,但是他们在以下几个方面存在不同:
TRUNCATE被归类为 DDL 语句,而DELETE被归类为 DML 语句。TRUNCATE操作无法被回滚,而DELETE可以被回滚。TRUNCATE操作删除和重建表,它的速度比DELETE快得多。TRUNCATE操作会重置表的自增值,而DELETE不会。TRUNCATE操作不会激活删除触发器,而DELETE会。TRUNCATE操作不返回代表删除行的数量的值,它通常返回0 rows affected。DELETE返回删除的行数。- 如果一个表被其他表的外键引用,对此表的
TRUNCATE操作会失败。
TRUNCATE 实例
我们通过以下实例演示
TRUNCATE TABLE
的用法。
首先,我们使用下面的语句创建一个
test
表用于测试:
CREATE TABLE test (
id INT AUTO_INCREMENT PRIMARY KEY,
v INT
);
然后我们使用下面的 sql 语句插入10 万条数据:
INSERT INTO test (v)
SELECT (
t4.i * 10000 + t3.i * 1000 + t2.i * 100 + t1.i * 10 + t0.i
) v
FROM (
SELECT 0 i
UNION
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
) t0,
(
SELECT 0 i
UNION
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
) t1,
(
SELECT 0 i
UNION
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
) t2,
(
SELECT 0 i
UNION
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
) t3,
(
SELECT 0 i
UNION
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
) t4
ORDER BY v;
Query OK, 100000 rows affected (1.24 sec)
Records: 100000 Duplicates: 0 Warnings: 0
通过以下
DELETE
语句删除所有表中的所有行:
DELETE FROM test;
Query OK, 100000 rows affected (1.01 sec)
补充:用下面的语句插入一行数据。
INSERT INTO test (v) values (1);
然后查看一下表中的数据:
+--------+------+
| id | v |
+--------+------+
| 131071 | 1 |
+--------+------+
1 row in set (0.00 sec)
这是
TRUNCATE TABLE
语句的返回结果。它告诉我们总共耗费 0.02 秒。这里可以看出
TRUNCATE
比
DELETE
快的多。
最后,我们用下面的语句插入一行数据:
INSERT INTO test (v) values (1);
然后查看一下表中的数据:
+----+------+
| id | v |
+----+------+
| 1 | 1 |
+----+------+
1 row in set (0.00 sec)
输出结果告诉我们,
TRUNCATE
操作后,自增列
id
的值重置为
1
。这与
DELETE
操作不同。
如果你需要在删除数据后仍然保持原有的自增值,请不要使用
TRUNCATE
。
结论
在本文中,我们介绍了在 MySQL 服务器上如何使用
TRUNCATE TABLE
语句清空表。本文的要点如下:
TRUNCATE TABLE语句用于清空一个表。TABLE关键字可以省略。TRUNCATE TABLE相当于删除并重建表,它不能回滚。TRUNCATE TABLE比DELETE速度快的多,尤其是对大数据表来说。TRUNCATE TABLE会重置表的自增值。
版权归原作者 代码爱小菜鸡 所有, 如有侵权,请联系我们删除。