トランザクションとACID
luagate/transaction-acid-introトランザクション入門23 枚データベース・SQL
上から下へ、全 23 枚そのまま並べています。
発表モードで開くトランザクションとACID
目次
今日のゴール
この時間で身につけてほしいことです。
- 途中で失敗すると何が困るかが分かる
- トランザクションが「全部か無か」だと分かる
- ACIDの4つの性質をイメージできる
- コミットとロールバックの違いが分かる
- ロックとデッドラックのさわりに触れる
途中で失敗したら?
複数の処理を続けて行う途中で止まると、片方だけ進んだ中途半端な状態が残ってしまいます。
- 銀行振込はお金を引いて、相手に足す2手順
- 引いた直後に止まるとお金が消える
- 逆に足した直後に止まると勝手に増える
- 片方だけ成功した状態がいちばん危ない
- だから「全部か無か」で扱いたい
トランザクション とは
いくつかの処理を1つのまとまりとして扱い、全部成功するか、まったく行わなかったことにするしくみです。
銀行振込の例
振込は「引く」と「足す」がワンセット。どちらか片方だけ、は許されません。
第2部 ACID特性
ACID とは
トランザクションが安全であるために満たすべき、4つの性質の頭文字をまとめた言葉です。
ACIDの4特性
4つの性質それぞれが、どんなトラブルを防いでいるかを並べます。
原子性(全部か無か)
ACIDの中心となる考え方で、処理を分割できない1つのかたまりとして扱います。
残りの3つの性質
一貫性・独立性・耐久性が、それぞれ別の角度から安全を支えます。
第3部 確定と取り消し
コミット と ロールバック
トランザクションの流れ
開始から確定または取り消しまで、決まった流れで進みます。
確定までのデータの流れ
処理の途中はまだ仮の状態で、コミットして初めてデータベースに正式に書き込まれます。
- 開始から確定までは仮の状態として進む
- 途中の変更はまだ確定していない
- コミットすると正式に書き込まれる
- 失敗時はロールバックで仮の変更を捨てる
- 確定後は耐久性で守られ消えない
第4部 同時実行の制御
排他制御(ロック)
同じデータを複数の処理が同時に触って混乱しないよう、一時的に鍵をかけるしくみです。
デッドロックのさわり
2つの処理がお互いの鍵を待ち合って、どちらも進めなくなる状態です。
同時アクセス時の待ち時間(イメージ)
同じデータを同時に触る処理が増えるほど、ロック待ちで時間がかかりやすくなります。あくまでイメージです。
振り返りクイズ
振り返りクイズ 解答
質疑・次回予告
今日のまとめと、次に学ぶテーマです。質問があればここで受け付けます。
"
トランザクションは「全部か無か」の約束。途中で倒れても中途半端を残さず、ACIDの4つの性質がデータの正しさを守る。だからこそ、私たちは安心してお金やデータを預けられます。