Transactions in MySQL
MySQLは自分自身ではTransactionsを管理しない、ストレージエンジンが行う
1つのトランザクションの中で二つのエンジンを混ぜると危険
InnoDBとMyISAMテーブル
片方だけトランザクションをサポートしてなかったりするとロールバックができない
トランザクションをサポートしてないテーブルにトランザクション機能を使ってもエラーは出ない
InnoDBは2相コミット(two-phase-commit)プロトコルを使う
トランザクションのいつでもロックを取得するが、解放は終了時にまとめて行う
これは暗黙的に行われる
明示的にすることもできる
Select ... for share
Select ... for update
Lock tables Unlock tables→サーバーで実装(エンジンではない)
InnoDBは行レベルロックを持っているのでいらない
行レベルロックと合わせると複雑なので使わない方がいい
Efficient MySQL Performance Chapter 8. Transactions