服务器版本:5.7.17 MySQL社区服务器(GPL)
这是我的情况。 我有两张桌子。
CREATE TABLE a (id INT PRIMARY KEY);
CREATE TABLE b (id INT PRIMARY KEY);
现在,我正在做我的交易:
START TRANSACTION;
INSERT INTO `a` VALUE (1);
CREATE TABLE b (id INT PRIMARY KEY);
当然我希望语句3(CRATE TABLE'b')将失败,因为表已经存在。确实如此。问题是,它也会插入,在我运行
之前不应该插入COMMIT;
无法回滚交易 - 表'a'中的记录'1'保持不变。
您是否有任何想法或想法如何避免此类行为?我还注意到,当我故意在CREATE TABLE STATEMENT中执行语法错误时,它会像预期的那样失败,但是不会创建'a'中的记录。
答案 0 :(得分:2)
有许多语句会导致隐式提交。 CREATE TABLE就是其中之一。
更多信息: https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html
也许How to prevent mysql implicit commit可以提供帮助。