Skip to content

Commit

Permalink
fix ch7-transaction: serializability
Browse files Browse the repository at this point in the history
  • Loading branch information
AlphaWang committed Aug 1, 2022
1 parent b9ea463 commit c564c08
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions ch7.md
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ UPDATE wiki_pages SET content = '新内容'
我们已经看到,有各种不同的方法来防止丢失的更新。但对于写偏差,我们的选择更受限制:

* 由于涉及多个对象,单对象的原子操作不起作用。
* 不幸的是,在一些快照隔离的实现中,自动检测丢失更新对此没有帮助。在 PostgreSQL 的可重复读,MySQL/InnoDB 的可重复读,Oracle 可串行化或 SQL Server 的快照隔离级别中,都不会自动检测写入偏差【23】。自动防止写入偏差需要真正的可串行化隔离(请参阅 “[可串行化](#可串行化)”)。
* 不幸的是,在一些快照隔离的实现中,自动检测丢失更新对此并没有帮助。在 PostgreSQL 的可重复读,MySQL/InnoDB 的可重复读,Oracle 可串行化或 SQL Server 的快照隔离级别中,都不会自动检测写入偏差【23】。自动防止写入偏差需要真正的可串行化隔离(请参阅 “[可串行化](#可串行化)”)。
* 某些数据库允许配置约束,然后由数据库强制执行(例如,唯一性,外键约束或特定值限制)。但是为了指定至少有一名医生必须在线,需要一个涉及多个对象的约束。大多数数据库没有内置对这种约束的支持,但是你可以使用触发器,或者物化视图来实现它们,这取决于不同的数据库【42】。
* 如果无法使用可串行化的隔离级别,则此情况下的次优选项可能是显式锁定事务所依赖的行。在例子中,你可以写下如下的代码:

Expand Down Expand Up @@ -871,7 +871,7 @@ WHERE room_id = 123 AND

一个相当新的算法,避免了先前方法的大部分缺点。它使用乐观的方法,允许事务执行而无需阻塞。当一个事务想要提交时,它会进行检查,如果执行不可串行化,事务就会被中止。

本章中的示例主要是在关系数据模型的上下文中。但是,正如**[多对象事务的需求](#多对象事务的需求)**” 中所讨论的,无论使用哪种数据模型,事务都是有价值的数据库功能。
本章中的示例主要是在关系数据模型的上下文中。但是,正如在**[多对象事务的需求](#多对象事务的需求)**” 中所讨论的,无论使用哪种数据模型,事务都是有价值的数据库功能。

本章主要是在单机数据库的上下文中,探讨了各种想法和算法。分布式数据库中的事务,则引入了一系列新的困难挑战,我们将在接下来的两章中讨论。

Expand Down

0 comments on commit c564c08

Please sign in to comment.