关于MySQL中删除操作 drop、truncate 和 delete 对比分析

drop、truncate、delete删除操作对比
博客主要介绍了drop、truncate、delete三个关键字的删除强度和区别。删除强度上,drop最强,truncate次之,delete最弱。drop会删除表结构和数据且无法找回;truncate删除全量数据,不能用where,不可回滚;delete可指定行删除,能回滚,不删索引。

目录

  • 1、三个关键字的删除强度
  • 2、三个关键字的区别

1、三个关键字的删除强度

删除强度(强 -> 弱):drop  >  truncate >  delete

2、三个关键字的区别

drop table tb

  • 删除表结构和表中所有的数据
  • 并无法找回

truncate tb

  • 删除表中所有的数据
  • 不能与where连用
  • 不可以rollback,删除整表数据(ddl语句,隐式提交)
  • 删除索引,并且之后索引(id从零开始)

delete from tb  where

  • 删除表中的数据(可制定某一行)
  • 一行一行的删除,可以rollback
  • 不会删除索引
  • 删除可以返回行数

 

MySQL数据库操作中,DELETEDROPTRUNCATE是三个常用的数据删除命令,它们的区别如下: ### 功能差异 - DELETE:用于删除表中的特定行数据,可以指定条件删除,语法为 `DELETE FROM 表名 [WHERE 条件]`。例如,`DELETE FROM users WHERE age > 30;` 会删除 `users` 表中年龄大于30的所有行 [^2]。 - TRUNCATE:仅删除表中的所有数据,语法为 `TRUNCATE TABLE 表名`。例如,`TRUNCATE TABLE orders;` 会删除 `orders` 表中的所有数据,但保留表结构 [^2]。 - DROP删除表及其所有数据,同时也会删除被依赖的约束、触发器、索引等,语法为 `DROP TABLE 表名`。例如,`DROP TABLE products;` 会彻底删除 `products` 表 [^2][^4]。 ### 删除后表索引所占空间的区别 - DELETE操作不会减少表或索引所占用的空间。因为DELETE只是标记要删除的行,表的物理空间不会被释放 [^4]。 - 当表被TRUNCATE后,这个表索引所占用的空间会恢复到初始大小 [^4]。 - DROP语句将表所占用的空间全释放掉 [^4]。 ### 删除速度 删除速度方面,DROP > TRUNCATE > DELETEDROP直接移除整个表结构,TRUNCATE删除数据,而DELETE逐行删除数据,所以速度相对较慢 [^4]。 ### 应用范围 - DELETE可以用于表视图,只删除数据,不删除表的结构 [^4]。 - TRUNCATE只能对表操作,只删除数据,不删除表的结构 [^4]。 - DROP用于删除整个表(结构数据),同时也会删除被依赖的约束、触发器、索引等,但是依赖于该表的存储过程/函数将被保留,但其状态会变为invalid [^4]。 ### 语句类型 - DELETE语句为DML(Data Manipulation Language),这个操作会被放到rollback segment中,事务提交后才生效,如果有相应的trigger,执行的时候将被触发,可以通过rollback撤消操作。例如: ```sql START TRANSACTION; DELETE FROM users WHERE id = 1; -- 若想撤销操作 ROLLBACK; ``` - TRUNCATEDROP是DDL(Data Definition Language),操作立即生效,原数据不放到rollback segment中,不能回滚 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值