开启掘金成长之旅!这是我参与「掘金日新计划 · 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
删除的数据内存会直接释放,表结构也会被删除,索引,外键,关联表等关系均会被标记为失败状态,无法使用
连表结构都没有,回滚操作也理所当然的不支持
看到了网上的一个描述,非常形象
你以为结束了
下一篇我们继续挖坑
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!