翼度科技»论坛 编程开发 mysql 查看内容

MySQL语句之删除指令deleted和truncate在使用中的异同详解

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
删除指令deleted和truncate在使用中的异同

在MySQL中,
  1. DELETE
复制代码
  1. TRUNCATE
复制代码
是两种不同的数据操作命令,虽然都能起到删除数据的作用,但是功能和影响均有所不同。

理论


1.功能


    1. DELETE
    复制代码
    用于从表中删除特定的行,通常基于特定的条件。
    1. TRUNCATE
    复制代码
    用于删除表中的所有数据,但保留表的结构。

2.事务性


    1. DELETE
    复制代码
    是DML(数据操纵语言)命令,因此可以在事务中使用,并且可以通过
    1. ROLLBACK
    复制代码
    撤消删除操作。
    1. TRUNCATE
    复制代码
    是DDL(数据定义语言)命令,不能在事务中使用,也无法通过
    1. ROLLBACK
    复制代码
    撤消删除操作。

3.性能


  • 删除大量数据时可能较慢,特别是如果表有索引,删除过程可能需要更新索引,因此相对较慢。
    1. TRUNCATE
    复制代码
    的性能通常比
    1. DELETE
    复制代码
    更好,特别是在删除大量数据时,因为它不记录删除的每一行,而是直接释放存储空间。

4.影响


    1. DELETE
    复制代码
    仅删除满足条件的行,不影响表的结构。但是,它会记录删除的每一行,因此可能会增加事务日志的大小。
    1. TRUNCATE
    复制代码
    删除表中的所有行,但是保留表的结构,包括索引、约束等。它将表的自增长计数器重置为初始值。

5.总结


    1. DELETE
    复制代码
    是DML命令,适合用于删除特定行,支持条件删除,并且可以在事务中使用,但是它比较慢且增加了事务日志的大小。
    1. TRUNCATE
    复制代码
    是DDL命令,用于删除表中的所有数据,性能通常比
    1. DELETE
    复制代码
    更好,但是无法撤销操作,且会重置自增长计数器。

举个例子

假设有一个名为
  1. employees
复制代码
的表,其中包含员工的信息,包括
  1. id
复制代码
  1. name
复制代码
  1. salary
复制代码

现在需要删除这个表内的数据,并比较使用
  1. DELETE
复制代码
  1. TRUNCATE
复制代码
的效果。

1.使用 DELETE
  1. -- 删除表中薪资低于 3000 的员工记录
  2. DELETE FROM employees WHERE salary < 3000;
复制代码
在这种情况下,
  1. DELETE
复制代码
将删除所有薪资低于 3000 的员工记录。
如果表中有许多匹配的行,则
  1. DELETE
复制代码
将逐行删除这些行。
这可能需要一些时间,特别是如果表很大。

2. 使用 TRUNCATE
  1. -- 清空整个表
  2. TRUNCATE TABLE employees;
复制代码
  1. TRUNCATE
复制代码
将清空整个表,即删除表中的所有行,但保留表的结构。
在执行
  1. TRUNCATE
复制代码
后,表中的自增长计数器将重置为初始值,而且不会触发触发器。

3. 对比

使用
  1. DELETE
复制代码
时,我们可以根据条件选择性地删除行,而
  1. TRUNCATE
复制代码
则是将整个表清空。
  1. DELETE
复制代码
是 DML 操作,可以在事务中使用,可以撤消,但可能比较慢。
  1. TRUNCATE
复制代码
是 DDL 操作,不可回滚,性能通常比
  1. DELETE
复制代码
更好。
因此,如果需要精确控制删除的行或者需要保留表的结构,可以使用
  1. DELETE
复制代码

如果只是需要快速清空整个表而不关心数据内容,可以考虑使用
  1. TRUNCATE
复制代码


总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/database/3191000nz.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
来自手机

举报 回复 使用道具