タグ

japaneseとtransactionに関するmasterqのブックマーク (2)

  • トランザクションのネストの使い方まとめた(初心者向け) - Qiita

    トランザクションのネストについてまとめてみました どう記述したらネストができるの? ロールバックした時の挙動は? などなどまとめてみました 自分がよく使うMySQLRails(ActiveRecord)について記載します。他のDBやフレームワークでは多分話が変わりますのでご注意ください 前提 ネストしたトランザクションの挙動 ネストしたトランザクションって、正確な挙動がこうあるべきという決まりがあるのかどうかは筆者はよく知りません ここでは、以下のような挙動を満たすことを目的にします トランザクションの内部に、もう一つトランザクションを貼る 内側のトランザクションがロールバックした場合、外側のトランザクションには影響を与えない 外側のトランザクションがロールバックした場合、内側のトランザクションもロールバックする 内側だけコミットされてしまうと、外側のトランザクションから見ると一貫性が破

    トランザクションのネストの使い方まとめた(初心者向け) - Qiita
    masterq
    masterq 2021/01/18
    "2度目の BEGIN が実行された時、現在のトランザクションがコミットされ、新しいトランザクションが開始"/"内側のトランザクションは SAVEPOINT と書きます"
  • トランザクションをネストしたらどうなる? 内側だけロールバックできる? - Qiita

    トランザクションはRDBに対するひとかたまりの操作です。だから来入れ子も何もなく、始まりと終わりが一個ずつあるだけです。以上。 …で終わらせられないのは、それでもネストが必要になる場面があるからですね。 ありがちなのは、トランザクション開始終了処理まで込みのアプリケーション側関数・メソッドやストアドプロシージャの存在。こうした関数を、まあ関数ですから部品的に扱おうとするとトランザクションが開始した文脈下でこうした関数が呼び出されて入れ子のサブトランザクションスタート、ってことになったりします。 サブトランザクションのコミットは問題ない BEGIN TRANSACTION; INSERT ... 'A'); BEGIN TRANSACTION; INSERT ... 'B'); COMMIT TRANSACTION; INSERT ... 'C'); COMMIT TRANSACTION;

    トランザクションをネストしたらどうなる? 内側だけロールバックできる? - Qiita
    masterq
    masterq 2021/01/18
    トランザクションのネストさんDBの実装依存。。。厳しい。。。
  • 1