2017-10-29 17 views
0

InnoDB 5.6.35を使用していますが、MySQLトランザクションを実装する正しい方法に関する質問があります。私が以下を実装すると、1つのステートメントでMySQLに送信されます:MySQLトランザクションの実装

START TRANSACTION;

SQL文1; SQL文2; ... COMMIT;

質問:SQLステートメントの1つが失敗した場合、MySQLは自動的にロールバックを発行しますか?私が見た振る舞いは、失敗した操作(私のプログラムではロールバックさえ呼び出されていなくても)に遭遇したときにMySQLが上記の文をコミットしないように見えますが、私は、他の人が示唆しているようにストアドプロシージャにコードをラップする必要があり、コード内で「ロールバック」を明示的に呼び出す必要がありますか?

誰かがこれを明確にするのを助けることができますか?

答えて

0

https://dev.mysql.com/doc/refman/5.5/en/innodb-error-handling.html 場合によっては、失敗した文だけをロールバックします。

  • あなたがテーブルスペース内でファイル領域を使い果たすと、MySQLの表は エラーが発生し、InnoDBがSQLステートメントをロールバックがいっぱいです。
  • トランザクションデッドロックにより、InnoDBはトランザクション全体をロールバックします。
  • 重複キーエラーは、SQL文をロールバックします。
  • 行が長すぎます。エラーは、SQL文をロールバックします。
  • その他のエラーは主に(InnoDBストレージエンジンレベルの上)コードのMySQLの層によって検出され
  • 、それらは、対応するSQL文をロールバック
関連する問題