From c564c08884e0a270b35d5a34c3436d99fd907784 Mon Sep 17 00:00:00 2001 From: AlphaWang <1919wang@gmail.com> Date: Mon, 1 Aug 2022 23:41:25 +0800 Subject: [PATCH] fix ch7-transaction: serializability --- ch7.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch7.md b/ch7.md index 98b4f2c0..b330b8b3 100644 --- a/ch7.md +++ b/ch7.md @@ -487,7 +487,7 @@ UPDATE wiki_pages SET content = '新内容' 我们已经看到,有各种不同的方法来防止丢失的更新。但对于写偏差,我们的选择更受限制: * 由于涉及多个对象,单对象的原子操作不起作用。 -* 不幸的是,在一些快照隔离的实现中,自动检测丢失更新对此没有帮助。在 PostgreSQL 的可重复读,MySQL/InnoDB 的可重复读,Oracle 可串行化或 SQL Server 的快照隔离级别中,都不会自动检测写入偏差【23】。自动防止写入偏差需要真正的可串行化隔离(请参阅 “[可串行化](#可串行化)”)。 +* 不幸的是,在一些快照隔离的实现中,自动检测丢失更新对此并没有帮助。在 PostgreSQL 的可重复读,MySQL/InnoDB 的可重复读,Oracle 可串行化或 SQL Server 的快照隔离级别中,都不会自动检测写入偏差【23】。自动防止写入偏差需要真正的可串行化隔离(请参阅 “[可串行化](#可串行化)”)。 * 某些数据库允许配置约束,然后由数据库强制执行(例如,唯一性,外键约束或特定值限制)。但是为了指定至少有一名医生必须在线,需要一个涉及多个对象的约束。大多数数据库没有内置对这种约束的支持,但是你可以使用触发器,或者物化视图来实现它们,这取决于不同的数据库【42】。 * 如果无法使用可串行化的隔离级别,则此情况下的次优选项可能是显式锁定事务所依赖的行。在例子中,你可以写下如下的代码: @@ -871,7 +871,7 @@ WHERE room_id = 123 AND 一个相当新的算法,避免了先前方法的大部分缺点。它使用乐观的方法,允许事务执行而无需阻塞。当一个事务想要提交时,它会进行检查,如果执行不可串行化,事务就会被中止。 -本章中的示例主要是在关系数据模型的上下文中。但是,正如 “**[多对象事务的需求](#多对象事务的需求)**” 中所讨论的,无论使用哪种数据模型,事务都是有价值的数据库功能。 +本章中的示例主要是在关系数据模型的上下文中。但是,正如在 “**[多对象事务的需求](#多对象事务的需求)**” 中所讨论的,无论使用哪种数据模型,事务都是有价值的数据库功能。 本章主要是在单机数据库的上下文中,探讨了各种想法和算法。分布式数据库中的事务,则引入了一系列新的困难挑战,我们将在接下来的两章中讨论。