10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


14.2.10デッドロックの検出とロルバック

InnoDBでは,自動的にトランザクションのデッドロックが検出され,デッドロックを解除するためにトランザクション(複数の場合あり)がロールバックされます。InnoDBは,小さいトランザクションを選択してロルバックしようと試みます。トランザクションのサ,ズは,挿入,更新,または削除された行数によって決定されます。

InnoDBは,innodb_table_locks = 1(デフォルト)か演算器自动提交= 0の場合にテーブルロックを認識し,それよりも上位のMySQLレイヤーは,行レベルロックを識別します。それ以外の場合,InnoDBはMySQL锁表ステトメントで設定されたテブルロックまたはInnoDB以外のストレジエンジンで設定されたロックが関連しているデッドロックを検出できません。このような状況を解決するには,innodb_lock_wait_timeoutシステム変数の値を設定します。

InnoDBでトランザクションの完全なロールバックが実行されると,トランザクションで設定されたすべてのロックが解放されます。ただし,エラーの結果として単一のSQLステートメントのみがロールバックされると,ステートメントで設定された一部のロックが保持される可能性があります。これが発生する原因は,InnoDBでは,どの行がどのステートメントで設定されたのかをあとで確認できないような形式で,行ロックが格納されるためです。

トランザクションで选择がストアドファンクションを呼び出し,そのファンクション内のステートメントに失敗した場合は,そのステートメントがロールバックされます。さらに,そのあとで回滚が実行された場合,トランザクション全体がロルバックされます。

デッドロックを回避するためにデタベス操作を編成する方法に,セクション14.2.11 "デッドロックの対処方法"を参照してください。