当创建表失败时,MySQL会执行事务提交

时间:2017-06-16 00:52:14

标签: mysql transactions sql-insert create-table

服务器版本: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'中的记录。

1 个答案:

答案 0 :(得分:2)

有许多语句会导致隐式提交。 CREATE TABLE就是其中之一。

更多信息: https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

也许How to prevent mysql implicit commit可以提供帮助。