1
任何人都可以解释我在事务数据库中不可序列化的内容。请给我一个例子。 r1(x)r2(x)w1(y)c2 c1是不可序列化的吗?什么是不可序列化的时间表?在事务数据库中
任何人都可以解释我在事务数据库中不可序列化的内容。请给我一个例子。 r1(x)r2(x)w1(y)c2 c1是不可序列化的吗?什么是不可序列化的时间表?在事务数据库中
想象一下这个表(Oracle
):
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
,并发出以下查询:
-- session 1
UPDATE t_series
SET value = 1
WHERE value = 2
/
COMMIT
/
和
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
交易,那么:
-- 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
,我。即这些查询将只交换的
可序列化的事务将数据库视为与事务开始时完全相同的状态,除了事务本身所做的更改外。