2017-06-16 204 views
1

服务器版本:5.7.17 MySQL社区服务器(GPL)MySQL在创建表时失败时创建事务提交表

这是我的情况。 我有两张桌子。现在

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; 

没有办法回滚事务 - 记录“1”表中地点“A”的住宿环境。

你有什么想法或想法如何避免这种行为?我也注意到,当我故意在CREATE TABLE STATEMENT中执行语法错误时,它会像预期的那样失败,但是不会创建'a'中的记录。

回答

1

有一些导致隐式提交的语句。 CREATE TABLE就是其中之一。

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

也许How to prevent mysql implicit commit能有点帮助。

+0

感谢您的参考和解释。 您是否知道在执行期间锁定数据库以保持一致性的任何方式? – Alexey

+0

添加链接到https://stackoverflow.com/questions/16221993/how-to-prevent-mysql-implicit-commit可能有帮助。 – swa66