什么是不可序列化调度?在交易数据库中

发布于 2024-08-22 02:38:44 字数 69 浏览 5 评论 0原文

谁能解释一下事务数据库中什么是不可序列化的。请举个例子。 r1(x) r2(x)w1(y) c2 c1 这是不可序列化的吗?

Can anyone explain me what is non-serializable in transaction DB. please give me an example. r1(x) r2(x)w1(y) c2 c1 is this non-serializable?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ぃ双果 2024-08-29 02:38:44

想象一下这个表(在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

,即查询将仅交换

可序列化事务将数据库视为除了事务本身所做的更改之外,状态与事务开始时完全相同。

Imagine this table (in 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)

Now we start two READ COMMITTED transactions in two sessions:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

and issue the following queries:

-- session 1
UPDATE  t_series
SET     value = 1
WHERE   value = 2
/
COMMIT
/

and, then:

-- session 2
UPDATE  t_series
SET     value = 2
WHERE   value = 1
/
COMMIT
/

The outcome will be this:

id   value
1    2
2    2

, i. e. both records will have value = 2

The first query made both records to have value = 1, the second query saw these changes and made both records to have value = 2.

If we did the same with SERIALIZABLE level, the outcome would be this:

id   value
1    2
2    1

, i. e. the queries will just swap the value's

A serializable transaction sees the database in exactly same state it was when the transaction had begun, except for the changes made by the transaction itself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文