簡體   English   中英

隔離級別和不一致狀態

[英]Isolation level and inconsistent state

假設我已經提交了隔離級別讀取

  • 我的交易是A

  • 另一個事務修改A和B.

  • 然后我讀了B.

  • 我做了一些涉及A和B的業務邏輯

所以我會發現自己與一個從未存在的國家合作......?
你是如何應對的?

解決方案是鎖定資源,直到它被釋放:

ES:

  • 我讀了A
  • 另一個事務(K)嘗試修改A,但它被阻止,它不能。
  • 我讀了B.
  • 我做了一些涉及A和B的業務邏輯
  • K嘗試修改A,它可以做到這一點因為A在這一刻是免費的並且閱讀B.

注意:如果K必須讀A和B,但是不能讀A,它就不會無用地阻塞B.

另一個解決方案是插入許多控件

ES:

  • 我讀了A.
  • 另一個事務修改A和B.
  • 我讀了B.
  • 我嘗試做一些業務邏輯,但是控件說我“注意,A的值不會更新!”。
  • 我讀了A的新值。
  • 我做了一些涉及A和B的業務邏輯。

您應該提供更詳細的信息,例如步驟1和3是在相同或不同的事務中執行。 還要提一下步驟4,即“業務邏輯”是否讀取或更新A和/或B.如果沒有更多信息,則無法准確回答您的問題。 在高層次 -

  1. 讀取已提交:您看到已提交的行。 在這種情況下,由於在另一個事務修改它之前讀取了A(假設您的子彈描繪了事件I到IV的順序),在步驟II之后可能沒有最新值A. 如果您在單獨的交易中閱讀B,您可能會在步驟II中看到B是最新的。

  2. 可重復讀取:在同一事務中始終讀取相同的數據。 如果一個事務嘗試修改A而另一個事務正在讀取它,則根據並發控制機制,重復讀取或更新將失敗。

PS要執行原子更新,您可以考慮使用“select for update”查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM