谁能解释一下事务数据库中什么是不可序列化的。请给我一个例子。r1(x) r2(x)w1(y) c2 c1 这是不可序列化的吗?
问问题
6665 次
1 回答
3
想象一下这张表(在 中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
level 做同样的事情,结果将是这样的:
id value
1 2
2 1
,即查询只会交换value
's
可序列化事务看到的数据库处于与事务开始时完全相同的状态,除了事务本身所做的更改。
于 2010-02-17T16:50:01.670 回答