トランザクション

分離レベル

MySQL(InnoDB)

REPEATABLE READ

※READ UNCOMMITTED
※READ COMMITTED(OracleとPostgreSQL)
※REPEATABLE READ(MySQL)
※SERIALIZABLE

https://www.postgresql.jp/document/13/html/transaction-iso.html

ロック

MySQL(InnoDB)

行ロックとバージョニングのトランザクション対応
※読み取りロックは不要
※クエリの実行から終了までデータビューの一貫性が保証される

明示的な終了

commit
rollback

自動的な終了

トランザクションスコープ内でデータベースサーバーがシャットダウンした場合
※再起動時にロールバックされるので、それまではデータは一貫性がない状態になる

データベースを作成または削除した場合
テーブル作成、削除、または変更した場合
インデックス作成、削除、または変更した場合
ストアドルーチンを作成、削除、または変更した場合
※データ定義言語(DDL)実行時
※トランザクション実行時にDDLを実行する場合には自動コミットされ、別セッションの新しいトランザクションになる
※トランザクションを使うアプリケーションがある場合は止めてからDDLを実行する

start transaction
※それまでのトランザクションはコミットされる

デッドロック検出時
※ロールバックされ、エラーメッセージが表示される

デッドロック

全トランザクションでデータリソースに常に同じ順番でアクセスするようにする
※どの順番でアクセスするかを決めておく