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

 更新时间:2024年04月02日 10:21:32   作者:Hello 阿月  
这篇文章主要介绍了MySQL语句之删除指令deleted和truncate在使用中的异同,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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

在MySQL中,DELETETRUNCATE

是两种不同的数据操作命令,虽然都能起到删除数据的作用,但是功能和影响均有所不同。

理论

1.功能

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

2.事务性

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

3.性能

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

4.影响

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

5.总结

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

举个例子

假设有一个名为 employees 的表,其中包含员工的信息,包括 idnamesalary

现在需要删除这个表内的数据,并比较使用 DELETETRUNCATE 的效果。

1.使用 DELETE

-- 删除表中薪资低于 3000 的员工记录
DELETE FROM employees WHERE salary < 3000;

在这种情况下,DELETE 将删除所有薪资低于 3000 的员工记录。

如果表中有许多匹配的行,则 DELETE 将逐行删除这些行。

这可能需要一些时间,特别是如果表很大。

2. 使用 TRUNCATE

-- 清空整个表
TRUNCATE TABLE employees;

TRUNCATE 将清空整个表,即删除表中的所有行,但保留表的结构。

在执行 TRUNCATE 后,表中的自增长计数器将重置为初始值,而且不会触发触发器。

3. 对比

使用 DELETE 时,我们可以根据条件选择性地删除行,而 TRUNCATE 则是将整个表清空。

DELETE 是 DML 操作,可以在事务中使用,可以撤消,但可能比较慢。

TRUNCATE 是 DDL 操作,不可回滚,性能通常比 DELETE 更好。

因此,如果需要精确控制删除的行或者需要保留表的结构,可以使用 DELETE

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

总结

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

相关文章

  • getdata table表格数据join mysql方法

    getdata table表格数据join mysql方法

    今天小编就为大家分享一篇关于getdata table表格数据join mysql方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 解析MySQL索引的作用

    解析MySQL索引的作用

    这篇文章主要为大家详细介绍了MySQL索引的作用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • MySQL中临时表的基本创建与使用教程

    MySQL中临时表的基本创建与使用教程

    这篇文章主要介绍了MySQL中临时表的基本创建与使用教程,注意临时表中数据的清空问题,需要的朋友可以参考下
    2015-12-12
  • MySQL主从复制问题总结及排查过程

    MySQL主从复制问题总结及排查过程

    这篇文章主要介绍了MySQL主从复制问题总结及排查过程,mysql主从是常用的高可用架构之一,也是使用最广泛的的系统架构。在生产环境中mysql主从复制有时会出现复制错误问题。下文更多内容需要的小伙伴可以参考一下
    2022-03-03
  • mysql8.0.11 winx64安装配置方法图文教程(win10)

    mysql8.0.11 winx64安装配置方法图文教程(win10)

    这篇文章主要为大家详细介绍了win10下mysql8.0.11 winx64安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Mysql数据库命令大全

    Mysql数据库命令大全

    mysql命令大家经常会用到,但是很少有朋友整理吧,最近项目不多,抽个时间把mysql数据库命令总结给大家,需要的朋友可以参考下
    2015-09-09
  • MySQL数据库中删除重复记录简单步骤

    MySQL数据库中删除重复记录简单步骤

    这篇文章主要给大家介绍了关于MySQL数据库中删除重复记录的相关资料,在使用数据库时,出现重复数据是常有的情况,但有些情况是允许数据重复的,而有些情况是不允许的,当出现不允许的情况,我们就需要对重复数据进行删除处理,需要的朋友可以参考下
    2023-08-08
  • 浅谈mysql的索引设计原则以及常见索引的区别

    浅谈mysql的索引设计原则以及常见索引的区别

    下面小编就为大家带来一篇浅谈mysql的索引设计原则以及常见索引的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Mysql8导入数据到Mysql5.7的实现步骤

    Mysql8导入数据到Mysql5.7的实现步骤

    Mysql8的默认字符集为utf8mb4,当我们有需求要把Mysql8的数据导入到Mysql5.7时,就会出现不支持,本文主要介绍了2种解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2022-03-03
  • MySQL学习教程之聚簇索引

    MySQL学习教程之聚簇索引

    这篇文章主要给大家介绍了关于MySQL学习教程之聚簇索引的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论