今天小编给大家梳理一下MYSQL删除操作Delete、Truncate、Drop用法有什么区别,到底该如何合理使用,希望对大家能有帮助!

1、执行速度比较

Delete、Truncate、Drop关键字都可以删除数据

drop>truncate>delete

2、原理方面

2.1 delete

delete属于数据库DML操作语言,只会删除数据表中的记录,会执行事务,执行的时候也会触发触发器。

InnoDB数据库引擎中,执行delete操作只会给删除的记录打上了删除标记,并不会真正删除数据,只是把删除的数据记录设置为不可见,不会释放磁盘空间,如果插入新的数据可以覆盖该部分空间。

如果开启事务的话,执行delete操作,会先将要删除数据缓存到rollback segement中,等事务commit之后才生效。

delete from table_name 不带查询条件会删除表的全部数据,MyISAM引擎会立刻释放磁盘空间,InnoDB 不会释放磁盘空间;如果带查询条件的话都不会释放磁盘空间,可以执行optimize table table_name 会立刻释放磁盘空间。建议如果需要释放存储空间的话可以执行delete后,然后执行optimize table table_name 语句达到清理磁盘空间的目的。

-- 查询数据库test对应的表t_user 占用的磁盘空间
select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size
from information_schema.tables
where table_schema='test' AND table_name='t_user';

说明:delete 操作是逐行执行删除的,并且同时将每行的的删除操作日志记录在redo和undo表空间中去,便于进行回滚(rollback)和重做操作,因此生成的大量操作日志也会占用磁盘空间。

2.2 truncate

truncate是数据库DDL定义语言,不受事务影响,也不会触发 trigger。执行操作后会立即生效,无法找回删除的数据。

执行truncate table table_name 会立刻释放磁盘空间 ,不管是 InnoDB和MyISAM 都一样 。

truncate可以退快速清空一个表。并且重置auto_increment自动增长的值。针对不同类型的数据存储引擎是有区别的,具体如下:

MyISAM:truncate会重置auto_increment(自增序列)的值为1。而delete后表仍然保持auto_increment。

InnoDB:truncate会重置auto_increment的值为1。delete后表仍然保持auto_increment。但是在做delete整个表之后重启MySQL的话,则重启后的auto_increment会被置为1。

说明:InnoDB的表本身是无法持久保存auto_increment。delete表之后auto_increment仍然保存在内存,但是重启后就找不到了,只能从1开始。实际上重启后的auto_increment会从 SELECT 1+MAX(ai_col) FROM t 开始。

使用truncate操作的时候要最好备份表,避免出现不可挽回的情况。

2.3 drop

drop属于数据库DDL定义语言,和truncate一样。执行后会立即生效,不可恢复。

drop table table_name 执行成功后不管是MyISM还是InnoDB都会立刻释放磁盘空间 ,并且会删除该数据表上依赖的约束(constrain)、触发器(trigger)、索引(index);  依赖于该表的存储过程/函数将保留,但是会变为失效状态。

总结

在工作当中执行数据库删除的时候一定要慎重再慎重,建议每次进行数据删除的使用最好数据表的备份工作,这样就会大大减少你删除跑路的几率。很多时候不要过于相信自己的动手能力,老虎还有打盹的时候,万一手滑了呢。尽可能养成好的数据库运维习惯,这样会让自己少跌跟头,你的事业才会更加顺利。

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

MYSQL笔记:删除操作Delete、Truncate、Drop用法比较相关推荐

  1. Mysql中删除语句delete、truncate、drop的区别

    Mysql中删除语句delete.truncate.drop的区别 1.DROP: 用法: DROP TABLE 表名 DDL语句,删除数据和表结构,释放空间资源.注意:操作不放到rollback s ...

  2. mysql 插入删除操作_MySQL——增删改操作

    插入语句 一次插入操作只插入一行数据 insert into [tablename](listname1,listname2,......) values (value1,value2,......) ...

  3. 关于数据库中的delete,truncate,drop

    关于数据库中的delete,truncate,drop Delete Delete :删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行). 删除某一行:Delete from ...

  4. mysql中delete,truncate,drop区别

    drop和delete只是删除表的数据(定义),drop语句将删除表的结构.被依赖的约束(constrain).触发器 (trigger).索引(index);依赖于该表的存储过程/函数将保留,但是变 ...

  5. Oracle delete truncate drop 的区别

    1. delete/truncate 只删除数据不删除表,索引的结构. drop 将删除表的结构及依赖的 index/constrain/trigger,依赖于该表的 procedure/functi ...

  6. 解决Mysql执行删除操作报错:1093的问题

    1.执行类似如下语句: -- -- 需要执行删除操作的目标表和原表一致 delete from t_info where id in (SELECT id FROM `t_info` where id ...

  7. mysql数据库删除操作指令_MySQL删除数据库的命令是什么?

    删除数据库的命令是:"DROP DATABASE 数据库名;":例"drop database student;"就是删除名为student的数据库." ...

  8. 14. Mybatis 删除操作-delete

    1. delete 标签 delete 标签是用于定义delete 语句的. 1.1 常用属性 delete 有几个常用的属性, 但是通常只需要设置id 即可. id: sql 片段在命名空间内的唯一 ...

  9. JS 删除操作 delete

    简介 用来删除一个对象的属性. 语法 delete expresson express 应该是一个对象的引用,例如 delete object.property delete object['prop ...

最新文章

  1. iframe的sandbox使用
  2. POJ 1094 Sorting It All Out (拓扑排序)
  3. 删除数据 DataIntegrityViolationException: not-null property references a null or transient value解决...
  4. 《Adobe Illustrator CS5中文版经典教程》—第0课0.5节使用绘图模式
  5. 写给准备找工作的同志们!!!!(转载)
  6. 看动画学算法之:排序-选择排序
  7. 第二季2:/package/mpp/sample的总体分析
  8. vue+vant 移动端H5 商城项目_02
  9. HTML5新特征、窍门和技术(6~10)
  10. 如何保证消息队列的高可用
  11. jave类命名_Java重命名文件– Jave移动文件
  12. matlab上机操作作业指导书,LED自动固晶基本操作1
  13. msmms (二) sms与mms 简述!
  14. CCS6.0新建DSP_2833x工程文件详解
  15. echarts 世界地图 国家 中英文数据 nameMap
  16. QLineEdit光标问题
  17. CSDN上Android与IPhone开发博客精选
  18. 三阶及四阶Runge-Kutta法
  19. 【动手学深度学习】(task123)注意力机制剖析
  20. sprintf基本用法

热门文章

  1. Django Step by Step中文版,推荐一下
  2. C# 使用 Windows API 操作控件: SendMessage
  3. PCIE总线-PCI、PCIE关系及信号定义
  4. AA级与AAA级台灯 重要指标对比
  5. 期刊论文格式模板 电子版_期刊论文的框架结构
  6. LTI系统的物理可实现性与希尔伯特变换
  7. 新版Microsoft Edge支持跨平台跨设备浏览
  8. 外链引入css有哪些方式_HTML+CSS基础(三) CSS的引入方式和CSS选择器
  9. arduino byte转string_Java数组转List集合的三驾马车
  10. 牛客小白月赛6 J 洋灰三角