春风得意
春风十里,不及相遇有你❤️
晴空万里,不及心中有你❤️

春天来了
美好的事都将如期而至
愿世界平安
你我无恙
🌈🌈🌈
so,让我们继续刷题吧
drop,truncate,delete
先养眼,再刷题
❤️
今天还是好看的小姐姐

Question
Iet me see see
这次我们的话题可能有点紧张沉重
因为涉及到了删库跑路的环节
在面试中,有时候面试官可能会问
drop,truncate,delete的区别
我们的脑海中可能就是一个删除的操作
具体有什么区别,可能比较头大
这次我们就开始从各方面进行解析

Answer
Iet me see see
truncate:删除表的数据,但是表结构不变,比如id自增从1开始
delete:直接删除表中的所有数据
drop:直接删除掉表

相同点:
truncate和不带where的delete,以及drop都会删除表中的所有数据。
drop,truncate都是DDL(数据定义语言)执行后会自动提交
不同点:
truncate和delete只删除表的数据,不删除表的结构。
drop:删除表的结构,依赖约束,触发器,索引;
并且表的存储过程和函数保留,但变为invalid状态。


delete是数据库操作语言(dml),这个操作会放到rollback segement中,事务提交后才会生效,如果有响应的trigger,执行的时候才触发。
truncate,drop是数据库定义语言(ddl),操作立即生效,原数据不放到rollback segment中,不能回滚,操作不触发trigger。

表和索引所占空间:
当表被truncate后,这个表和索引所占空间会恢复到初始大小。
delete后:不会减少表和索引所占空间的大小
drop:将表所占用的空间全部释放掉。

速度:一般来说
drop>truncate>delete

安全性:
慎用drop和truncate,尤其是没有备份的情况下!
在使用中,想删除部分数据要加上where子句,并且回滚段要足够大。
想删除表直接drop
想保留表同时删除数据,如果和事务没有关系就直接truncate。如果和事务有关,或者想出发trigger,还是delete。

这次的问题
主要是说关于数据库删除操作
大家在操作中一定要谨慎谨慎再谨慎!
如果小伙伴还有其他的想法或问题也欢迎在评论区留言
让我们一起成长为老鸟,赚大钱!

最后小编的小手手上图



郭大熊的公众号
个人博客 : www.guodaxiong.com
如果不曾见过阳光,我本可以忍受黑暗
Hi GuoDaXiong
我是狗子
祝你幸福






