这个隔离级别和其他的概念很清楚。如果我们谈论其他级别,那么如何使用锁来实现它们就很清楚了。这里不加深对其他层次的粗略理解:
- Read Uncommited - 在写入后立即完成其操作的每个写入操作添加一个排他锁(无需等待事务结束)
- Read Commited - 在上一级添加共享读锁,读完后立即完成动作
- 可重复读取 - 而不是已提交的读取,读取锁仅在事务完成后过期。
但是在这种情况下他们如何使 Serializable ?实现的微妙之处可能非常好,但我想至少在肤浅的层面上理解。
这个隔离级别和其他的概念很清楚。如果我们谈论其他级别,那么如何使用锁来实现它们就很清楚了。这里不加深对其他层次的粗略理解:
但是在这种情况下他们如何使 Serializable ?实现的微妙之处可能非常好,但我想至少在肤浅的层面上理解。
在 Serializable 事务中对已在其中修改的行采取的锁在该事务完成后保持活动状态,直到在当前事务完成之前启动的所有其他 Serializable 事务都完成。如果另一个 Serializable 事务在读取数据时遇到这样的锁,它将被取消并发出序列化错误,根据该错误,应用程序代码可以从头开始重复该事务。
根据文档,这种机制至少被 postgresql 使用