InnoDB でのエラー処理は、必ずしも SQL 標準に明記されているとおりではありません。SQL-99 では、SQL ステートメントでエラーが発生した場合は、そのステートメントでロールバックを実行するように記述されています。InnoDB では、ステートメントの一部のみ、またはトランザクション全体がロールバックされることがあります。 次のリストは、InnoDB でのエラー処理の仕様です。
テーブルスペース内でファイル領域を使い果たすと、MySQL
の 'Table is full'
エラーが発生し、InnoDB が SQL
ステートメントをロールバックする。
トランザクションデッドロックまたはロック待ちのタイムアウトが発生すると、InnoDB がトランザクション全体をロールバックする。
重複キーエラーが発生した場合は、INSERT
INTO ... SELECT ...
のようなステートメント内であっても、その特定のレコードの挿入のみがロールバックされる。
この仕様は、SQL ステートメントに
IGNORE
オプションを指定しなかった場合のみステートメントがロールバックされるように変更される予定。
'row too long' エラーが発生した場合は、SQL ステートメントがロールバックされる。
その他のエラーは主に MySQL のコードレイヤによって検出され、検出された場合は対応する SQL ステートメントがロールバックされる。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.