MySQLでRollbackが効かないケースについて
経緯
下記のようなエラーメッセージが表示され、外部サーバーにあるMySQLでロールバックが効かない。
1196 Some non-transactional changed tables couldn't be rolled back
原因
非トランザクションである MyISAM テーブルとしてテーブルが作成されているので、ロールバックが出来なかった。
下記のステートメントで該当テーブルが使っているエンジンの確認ができる。
SHOW TABLE STATUS LIKE 'table_name';
スキーマ単位の確認の場合
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'schema_name' and ENGINE = 'myISAM'
EnginにMyISAMが設定されている
ちなみにRollback可能な場合はこうなっている
参考サイト
MySQL :: MySQL 5.6 リファレンスマニュアル :: B.5.5.5 非トランザクションテーブルのロールバックの失敗