delete、drop、truncate删表的区别

本文详细介绍了SQL中的三种删除操作:DELETE、TRUNCATE 和 DROP 的用法及区别。DELETE 用于删除表中符合条件的数据行,属于DML语言,支持事务回滚。TRUNCATE 用于清空整个表的数据,属于DDL语言,操作快速且不可回滚。DROP 用于删除表结构及其依赖项。
DELETE
delete from 表名 //删除整张表
delete from 表名 where 条件 //删除表中符合条件的数据
  • 属于DML语言,每次删除一行,都在事务日志中为所删除的每行记录一项。

  • 产生rollback,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发,如果删除大数据量的表速度会很慢

TRUNCATE
truncate table 表名
  • 只能操作表,将表中数据全部删除,在功能上和不带where子句的delete语句相同
  • truncate是DDL语言, 操作立即生效,自动提交,原数据不放到rollback segment中,不能回滚. 操作不触发trigger
  • 删除内容、释放空间但不删除表的结构
DROP
drop table 表名
  • drop语句将删除表的结构,以及被依赖的约束(constrain),触发器(trigger),索引(index)
  • 除内容和定义,释放空间
区别
  1. 删表和索引所占空间:
    当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小;
    DELETE操作不会减少表或索引所占用的空间;
    DROP语句将表所占用的空间全释放掉

  2. 执行速度:drop > truncate > delete

  3. 如果有identity产生的自增id列,delete后仍然从上次的数开始增加,即种子不变;使用truncate删除之后,种子会恢复到初始值。

  4. delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。

  5. 执行速度: drop > truncate > delete

在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、付费专栏及课程。

余额充值