LoginSignup
3
4

More than 5 years have passed since last update.

MySQLで遭遇したトランザクションとロックのお話(1)

Last updated at Posted at 2015-03-17

DBについて発表した内容について詳しくかきます。
初回はトランザクションについて
資料のソース元はこちら
http://www.slideshare.net/takukobayashi560/my-sqltake2-2

トランザクションって?

トランザクション処理は、既知の一貫した状態のデータベースを維持するよう設計されており、相互依存のある複数の操作が全て完了するか、全てキャンセルされることを保証する。(by Wikipedia)
http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

201205268.jpg

ドラゴンク○ストでの1場面

図1.jpg

お店で薬草を1個購入すると


  • 所持Gから8Gが減る
  • 薬草の所持数が1個増える

となる。

ここで、もし

  • 薬草の所持数が1個増える

ところでエラーが発生して薬草が1個増えなかったら。

  • 所持Gから8Gが減る

だけ実行されてしまうので、ユーザーは激怒プンプン丸になってしまう。
なので、

  • 薬草の所持数が1個増える。

がエラーになったら、

  • 所持Gから8Gが減る

もなかったことにしたい。

  • 薬草の所持数が1個増える。
  • 所持Gから8Gが減る の処理をセットで見て、両方とも反映完了するか両方ともなかったことにするようにする必要がある。

このように処理をセットとして扱うことをトランザクションという。
そして、トランザクションを終了するとき、両方とも反映完了とする時をコミット(COMMIT)
両方ともなかったことにすることをロールバック(ROLLBACK)
という

コード

  • SQL
BEGIN
~
COMMIT 又は ROLLBACK
  • Ruby on Rails
ActiveRecord::Base.transaction do
~
end

こんな感じに書く。

排他制御
楽観ロック
悲観ロックについては次回へ

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4