MySQL truncate table操作都干了啥,以及注意事项
2,124 total views, 1 views today
公司MySQL CRM库有大量不再使用的表(前缀相同),其中19年之前表就多大8000多张。使用批量备份脚本备份这些表后,批量生成truncate脚本开始执行truncate。
truncate过程并不快,一张表大概0.6秒,原以为几分钟内就能搞定,没想到执行了大概一小时。
那么,MySQL 执行truncate table 到底干了啥呢,不看不知道,一看真的刷新认知。
1、MySQL truncate table 需要 drop 权限。
2、truncate table操作删除并重建tbl_name.ibd文件,但是并不会操作tbl_name.frm文件。
3、表定义文件 tbl_name.frm 可用,但是tal_name.ibd文件损坏,依然可以执行truncate操作重建一张空表。
4、truncate 隐式提交,无法回滚。
5、如果session持有活跃的表锁(事务未提交,查询长时间未完成),那么无法执行truncate操作(等待元数据锁 Waiting for table metadata lock)。
6、truncate执行后,自增AUTO_INCREMENT值重置为起始值(取决于 auto_increment_offset 参数)。