[英]What is non-serializable schedule? in transaction database
誰能解釋我在事務數據庫中不能序列化的內容。 請給我一個例子。 r1(x)r2(x)w1(y)c2 c1是否不可序列化?
想象一下該表(在Oracle
):
CREATE TABLE t_series (id INT NOT NULL PRIMARY KEY, value INT NOT NULL)
INSERT
INTO t_series
VALUES (1, 1)
INSERT
INTO t_series
VALUES (2, 2)
現在,我們在兩個會話中啟動兩個READ COMMITTED
事務:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
並發出以下查詢:
-- session 1
UPDATE t_series
SET value = 1
WHERE value = 2
/
COMMIT
/
接着:
-- session 2
UPDATE t_series
SET value = 2
WHERE value = 1
/
COMMIT
/
結果將是這樣的:
id value
1 2
2 2
,即兩條記錄的value = 2
第一個查詢使兩個記錄的value = 1
,第二個查詢看到了這些更改並使兩個記錄的value = 2
。
如果我們對SERIALIZABLE
級別執行相同操作,結果將是這樣:
id value
1 2
2 1
,即查詢將只交換的value
可序列化的事務將數據庫視為與事務開始時完全相同的狀態,但事務本身所做的更改除外。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.