当前位置: 首页 > news >正文

MySQL清空表

当我们需要清空一个表中的所有行时,除了使用 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 affectedDELETE 返回删除的行数。
  • 如果一个表被其他表的外键引用,对此表的 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 iUNIONSELECT 1UNIONSELECT 2UNIONSELECT 3UNIONSELECT 4UNIONSELECT 5UNIONSELECT 6UNIONSELECT 7UNIONSELECT 8UNIONSELECT 9) t0,(SELECT 0 iUNIONSELECT 1UNIONSELECT 2UNIONSELECT 3UNIONSELECT 4UNIONSELECT 5UNIONSELECT 6UNIONSELECT 7UNIONSELECT 8UNIONSELECT 9) t1,(SELECT 0 iUNIONSELECT 1UNIONSELECT 2UNIONSELECT 3UNIONSELECT 4UNIONSELECT 5UNIONSELECT 6UNIONSELECT 7UNIONSELECT 8UNIONSELECT 9) t2,(SELECT 0 iUNIONSELECT 1UNIONSELECT 2UNIONSELECT 3UNIONSELECT 4UNIONSELECT 5UNIONSELECT 6UNIONSELECT 7UNIONSELECT 8UNIONSELECT 9) t3,(SELECT 0 iUNIONSELECT 1UNIONSELECT 2UNIONSELECT 3UNIONSELECT 4UNIONSELECT 5UNIONSELECT 6UNIONSELECT 7UNIONSELECT 8UNIONSELECT 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 会重置表的自增值。
http://www.lryc.cn/news/166973.html

相关文章:

  • 使用IDEA创建Vue3通过Vite实现工程化
  • GitLab使用的最简便方式
  • MySQL数据库20G数据迁移至其他服务器的MySQL库或者云MySQL库
  • build.gradle配置文件详解
  • 2024拼多多校招面试真题汇总及其解答(二)
  • 自动化运维工具Ansible教程(一)【入门篇】
  • 计算机毕业设计 微信小程序 uniapp+vue大学生兼职平台
  • JavaScript框架:构建交互性、现代化Web应用的利器
  • 数据结构——二分查找法
  • 服务端渲染(SSR):提升Web应用性能和用户体验的关键技术
  • 如何工作和生活相平衡?
  • semaphere部署,配置ldap
  • Java 泛型 T,E,K,V,?
  • 软件测试技术之地图导航的测试用例
  • 【C++】常用集合算法
  • css flex:1;详解,配合demo效果解答
  • discuzQ安装
  • 深入解析NLP情感分析技术:从篇章到属性
  • JVM的双亲委派模型
  • js中如何判断一个变量是否为数字类型?
  • 使用阿里PAI DSW部署Stable Diffusion WebUI
  • redisson使用过程常见问题汇总
  • 代码随想录训练营 DP序列
  • Datastage部署与使用
  • 【实用工具】Centos 安装ARL灯塔
  • IP地址定位基础数据采集
  • leetcode做题笔记138. 复制带随机指针的链表
  • 分布式文件系统的新兴力量:揭秘Alluxio的元数据管理机制【文末送书】
  • ArcGIS标注的各种用法和示例
  • 修改ros中的控制器,便于仿真和驱动真实UR