Delete,Drop,Truncate 区别小叙

128 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情

生命不息,学习不止

题外话

周日了,这两天看了好多土耳其的新闻,人类在大自然面前果然是不堪一击啊,意外和明天都是不确定的,只能说保持好心态,享受每一天,人生没有彩排,每天都是现场直播

废话不多说,上货

在这里插入图片描述

Delete Drop Truncate 在我们操作数据库的时候经常使用,今天就来说说他们的一个区别

Delete

delete 使用应该是最多的了,在curd的业务操作了,会经常使用

// 删除数据
delete from table_name where cloumes_name ....
// 删除全部数据
delete from tbale_name

delete 删除数据时,会对数据进行标记,标记为已删除,并将数据设置为不可见状态,但数据还是会占用相应的空

间,同时delete操作会详细记录在操作中,所以delete支持回滚操作

delete 面对不同的储存引擎会有不同的表现,例如删除全部数据的时候,MyISAM储存引擎会释放掉内存,InnoDB 则不会释放内存,在携带where 条件的时候则这两个引擎都不会释放内存

如果想释放内存,可以使用上一篇提到的optimize table 进行一次合并,此时会释放掉删除数据的内存

Truncate

truncate 应该是使用比较少的一个删除命令了

//删除全部数据
truncate table table_name

truncate 在删除表的全部数据后会重置自增列的初始化值,也就是说使用delete删除id 1到100数据后,再次插入的数据id 为 101

但truncate 删除数据后 再次插入数据,id则为1

并且truncate 会立刻释放掉删除数据的内存,也就意味着truncate操作删除的数据不支持回滚操作

Drop

Drop 真汉子,非常强硬

//删除数据
drop table table_name

删除的数据内存会直接释放,表结构也会被删除,索引,外键,关联表等关系均会被标记为失败状态,无法使用

连表结构都没有,回滚操作也理所当然的不支持

看到了网上的一个描述,非常形象

image.png

你以为结束了

下一篇我们继续挖坑

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述