MySQL / delete、truncate

本文对比了SQL中truncate和delete两种清空表数据的方法。truncate是整体删除,速度快,不写服务器日志,不激活触发器,重置自增字段。而delete逐条删除,速度慢,写服务器日志,保留自增字段。详细解析了两种操作的优缺点及适用场景。

truncate table table_name; # 截断表
delete * from table_name; # 清空表

其中truncate操作中的table可以省略,delete操作中的*可以省略

truncate、delete 清空表数据的区别 :
1) truncate 是整体删除 (速度较快),delete是逐条删除 (速度较慢)
2)truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete高的原因
3)truncate 不激活trigger (触发器),但是会重置Identity (标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的 ID数。
4)delete 删除以后,identity 依旧是接着被删除的最近的那一条记录ID加1后进行记录。
5)如果只需删除表中的部分记录,只能使用 DELETE语句配合 where条件

### MySQLDELETE、DROP和TRUNCATE的区别及用法 #### 1. 命令功能概述 - **DELETE** 是一种 DML (Data Manipulation Language, 数据操纵语言) 命令,主要用于删除表中的特定记录或全部记录,但保留表的结构不变[^1]。 - **DROP** 属于 DDL (Data Definition Language, 数据定义语言),用于完全删除一个表及其所有相关数据和结构。一旦执行 DROP 操作,该表将不再存在于数据库中[^3]。 - **TRUNCATE** 同样是一种 DDL 命令,它快速清空表中的所有数据,但不会影响表的结构。与 DELETE 不同的是,TRUNCATE 的效率更高,因为它不逐条处理每一条记录[^2]。 #### 2. 主要区别 ##### (1)语法形式 - 使用 `DELETE` 删除指定条件的数据时需配合 WHERE 子句;如果不加 WHERE,则会删除整个表的内容。 - `DROP` 的基本语法为 `DROP TABLE 表名;`,这将永久移除目标表及其关联对象(索引、约束等)。 - 对于 `TRUNCATE`,其典型写法是 `TRUNCATE TABLE 表名;`,仅清除数据而不改变其他属性。 ##### (2)性能表现 由于实现机制的不同,在大规模数据清理场景下: - `TRUNCATE` 性能最优,因为它是通过重新分配存储空间来完成操作,并且不会生成大量日志文件[^4]。 - 相较之下,`DELETE` 则较为低效,尤其是当涉及复杂查询或者大容量数据集时,会产生较多事务日志并占用更多资源。 ##### (3)自动增长字段的影响 值得注意的一点在于如何对待 AUTO_INCREMENT 自动编号列上, - 执行完 `TRUNCATE` 后,任何已存在的自增计数器都会被重设回到初始状态; - 而采用 `DELETE` 方式则保持原有最大值不变。 ##### (4)事务支持情况 关于能否撤销所做的更改方面也有明显差异: - 因为两者都归属于DDL范畴所以既无undo/redo log也不存在触发事件的可能性意味着无法撤消由他们引起的变化即不可rollback特性成立对于truncate而言同样如此[^5]; - 然而相比之下作为DML成员之一delete却允许纳入到显式的transaction block当中从而具备完整的commit&rollback能力以便必要时候可以恢复误删前的状态信息. #### 示例代码展示 以下是三种方法的实际应用例子: ```sql -- 使用 DELETE 清理满足一定条件的部分行 DELETE FROM employees WHERE department_id = 'HR'; -- 完全销毁 employee 这张表格连同它的元信息一起消失不见 DROP TABLE employees; -- 快速腾空 entire contents inside the table but leave its schema intact afterwards. TRUNCATE TABLE employees; ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值