トランザクション
分離レベル
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
※それまでのトランザクションはコミットされる
デッドロック検出時
※ロールバックされ、エラーメッセージが表示される
デッドロック
全トランザクションでデータリソースに常に同じ順番でアクセスするようにする
※どの順番でアクセスするかを決めておく