2017-06-16 6 views
1

サーババージョン:5.7.17 MySQLコミュニティサーバ(GPL)テーブルの作成に失敗した場合、MySQLはトランザクションのコミットを行います

ここは私のケースです。 私は2つのテーブルを持っています。

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」の表の代わりに「」留まります。

このような現象を回避する方法はありますか?私はまた、意図的にCREATE TABLE STATEMENTで構文エラーが発生した場合、期待通りに失敗するが、 'a'のレコードは作成されないことに気付きました。

答えて

1

暗黙のコミットを引き起こす多くのステートメントがあります。 CREATE TABLEはその1つです。

さらに詳しい情報: https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

たぶんHow to prevent mysql implicit commitはビットを助けることができます。

+0

参考および説明をいただきありがとうございます。 一貫性を保つために実行中にDBをロックする方法はありますか? – Alexey

+0

https://stackoverflow.com/questions/16221993/how-to-prevent-mysql-implicit-commitへのリンクが追加されました。 – swa66

関連する問題