delete、truncate、drop的区别

delete:只删除数据,不删除结构。删除的数据存储在系统回滚段中,可以回滚。不会自动提交事务。

在InnoDB中,delete不会真的把数据删除,mysql实际上只是给删除的数据打了个标记为已删除,因此delete删除表中数据时,表文件在磁盘上所占用空间不会变小,存储空间不会被释放,只是把删除的数据行设置为不可见。下次插入数据时,可以重用这部分空间。

删除全表数据,对于MyISAM会立刻释放磁盘空间,InnoDB不会释放磁盘空间。带条件的删除,不管是InnoDB还是MyISAM都不会释放磁盘空间。delete操作以后,使用optimize table table_name会立刻释放磁盘空间。

delete操作时一行一行执行删除的,并同时记录该行的删除操作日志。

truncate:只删除数据,不删除结构。删除的数据操作立即生效,立刻释放磁盘空间,不可以回滚。自动提交事务。

truncate会重置自增的值为1,delete不会,但重启后会被置为1。

drop:删除表结构、约束、触发器、索引。依赖该表的存储过程和函数会保留,状态变为invalid。删除数据立即生效,立刻释放表空间,不能回滚。

速度:drop>truncate>delete

posted @ 2021-09-07 15:25  Dream's  阅读(125)  评论(0编辑  收藏  举报