Informix-4GL
資料庫操作隔離
ISOLATION
以下是閱讀整理來自IBM資訊中心及網路先進的文章資料
使用SET ISOLATION語句定義嘗試同時訪問相同行的進程之間的並發程度。
SET ISOLATION語句可以更改交易的持久隔離級別。
資料庫使用共享鎖對嘗試訪問數據的進程之間的做不同級別的隔離。
更新或刪除過程總是在被修改的行上獲取排他鎖。隔離級別不會干擾您正在更新或刪除的行。如果另一個進程嘗試更新或刪除您正在讀取的具有可重複讀取隔離級別的行,則該進程將被拒絕訪問這些行。
在Informix ESQL/C 中,執行 SET ISOLATION 時打開的游標可能會或可能不會在檢索行時使用新的隔離級別。從游標打開到應用程序獲取行時設置的任何隔離級別都可能有效。資料庫可能使用當時有效的隔離級別將行讀入內部緩衝區和內部臨時表。為了確保一致性和可重現的結果,請在執行 SET ISOLATION 語句之前關閉所有打開的游標。
只有在打開資料庫後,您才能從客戶端發出 SET ISOLATION 語句。
有時會發生以下問題
。DIRTY READ(在SET TRANSACTION中稱為UNCOMMITTED):
如果一個 transaction 還沒有 commit,但是你卻讀得到已經更新的結果,這個情形叫做 Dirty Read。Dirty Read 也是一種 Non-repeatable reads。
。Non-repeatable reads
如果你在同一個 transaction 裡面連續使用相同的 Query 讀取了多次資料,但是相同的 Query 卻回傳了不同的結果,這個現象稱為 Non-repeatable reads。
。Phantom reads/rows
當在同一個 transaction 連續兩次讀取時,讀取出來的筆數跟上次不同,這個情況稱為 Phantom reads/rows。
根據所述的三個問題,在 SQL 內也透過不同的 Isolation 等級來標明哪個等級的 Isolation 可以解決上述問題。
語法請見上一篇
留言列表