mirror of
https://github.com/Vonng/ddia.git
synced 2024-12-06 15:20:12 +08:00
fix ch7-transaction: serializability
This commit is contained in:
parent
b9ea463bc6
commit
c564c08884
4
ch7.md
4
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
|
||||
|
||||
一个相当新的算法,避免了先前方法的大部分缺点。它使用乐观的方法,允许事务执行而无需阻塞。当一个事务想要提交时,它会进行检查,如果执行不可串行化,事务就会被中止。
|
||||
|
||||
本章中的示例主要是在关系数据模型的上下文中。但是,正如 “**[多对象事务的需求](#多对象事务的需求)**” 中所讨论的,无论使用哪种数据模型,事务都是有价值的数据库功能。
|
||||
本章中的示例主要是在关系数据模型的上下文中。但是,正如在 “**[多对象事务的需求](#多对象事务的需求)**” 中所讨论的,无论使用哪种数据模型,事务都是有价值的数据库功能。
|
||||
|
||||
本章主要是在单机数据库的上下文中,探讨了各种想法和算法。分布式数据库中的事务,则引入了一系列新的困难挑战,我们将在接下来的两章中讨论。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user