MySQL之drop、delete、truncate的区别

分类:Database, 发布于 2019-09-20,浏览(111),评论(0)

一、不同点

1.truncate table 和 delete只删除记录不删除表的结构,drop语句将删除表的结构依赖的约束(constrain),触发器(trigger),索引(index);

语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态 

2.truncate之后的自增字段从头开始计数了,而delete的仍保留原来的最在数值。

 

二、总结:

1.在速度上,一般来说,drop> truncate > delete。

2.在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

3.如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;
如果想删除表,当然用drop;
如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;
如果和事务有关,或者想触发trigger,还是用delete
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

评论: