BeWithYou

胡搞的技术博客

  1. 首页
  2. 运维/工具
  3. 有关TRUNCATE不能事务回滚

有关TRUNCATE不能事务回滚


今天做一个从文本全量导入数据库的功能,每次全量更新表里的数据。想法是在事务里先truncate掉表格,然后批量insert进去,出错则rollback,全部insert成功则commit。

然而发现一个问题,truncate以后即使回滚了也不能回到最初的状态。查了一下,truncate属于DDL语句,执行的时候是隐含着自动commit的,所以并不能在事务里使用。

简要记一下MySQL中数据语言的概念:

数据查询语言DQL 数据操纵语言DML 数据定义语言DDL 数据控制语言DCL
SELECT,FROM,WHERE INSERT,UPDATE,DELETE CREATE TABLE,TRUNCATE,VIEW,INDEX,SYN,CLUSTER GRANT,REVOKE

DDL是隐形提交了,所以不能rollback。

回到顶部