MySQL语句之删除指令deleted和truncate在使用中的异同详解
|
删除指令deleted和truncate在使用中的异同
在MySQL中,和是两种不同的数据操作命令,虽然都能起到删除数据的作用,但是功能和影响均有所不同。
理论
1.功能
- 用于从表中删除特定的行,通常基于特定的条件。
- 用于删除表中的所有数据,但保留表的结构。
2.事务性
- 是DML(数据操纵语言)命令,因此可以在事务中使用,并且可以通过撤消删除操作。
- 是DDL(数据定义语言)命令,不能在事务中使用,也无法通过撤消删除操作。
3.性能
- 删除大量数据时可能较慢,特别是如果表有索引,删除过程可能需要更新索引,因此相对较慢。
- 的性能通常比更好,特别是在删除大量数据时,因为它不记录删除的每一行,而是直接释放存储空间。
4.影响
- 仅删除满足条件的行,不影响表的结构。但是,它会记录删除的每一行,因此可能会增加事务日志的大小。
- 删除表中的所有行,但是保留表的结构,包括索引、约束等。它将表的自增长计数器重置为初始值。
5.总结
- 是DML命令,适合用于删除特定行,支持条件删除,并且可以在事务中使用,但是它比较慢且增加了事务日志的大小。
- 是DDL命令,用于删除表中的所有数据,性能通常比更好,但是无法撤销操作,且会重置自增长计数器。
举个例子
假设有一个名为的表,其中包含员工的信息,包括、和。
现在需要删除这个表内的数据,并比较使用和的效果。
1.使用 DELETE
- -- 删除表中薪资低于 3000 的员工记录
- DELETE FROM employees WHERE salary < 3000;
复制代码 在这种情况下,将删除所有薪资低于 3000 的员工记录。
如果表中有许多匹配的行,则将逐行删除这些行。
这可能需要一些时间,特别是如果表很大。
2. 使用 TRUNCATE
- -- 清空整个表
- TRUNCATE TABLE employees;
复制代码 将清空整个表,即删除表中的所有行,但保留表的结构。
在执行后,表中的自增长计数器将重置为初始值,而且不会触发触发器。
3. 对比
使用时,我们可以根据条件选择性地删除行,而则是将整个表清空。是 DML 操作,可以在事务中使用,可以撤消,但可能比较慢。是 DDL 操作,不可回滚,性能通常比更好。
因此,如果需要精确控制删除的行或者需要保留表的结构,可以使用。
如果只是需要快速清空整个表而不关心数据内容,可以考虑使用。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://www.jb51.net/database/3191000nz.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|
|
|
发表于 2024-4-13 18:25:18
来自手机
举报
回复
分享
|
|
|
|