Vla*_*cea 6 mysql sql-server oracle postgresql transactions
大多数RDBMS允许在所选行上获取共享锁独占锁.例如,PostgreSQL有这样的语法:
SELECT *
FROM post
WHERE id=10
FOR SHARE;
Run Code Online (Sandbox Code Playgroud)
使用FOR SHARE,即使在READ_COMMITTED隔离级别,我们也可以获取共享锁,并且可以防止不可重复的读取现象,而无需实际使用REPEATABLE_READ事务隔离.
但是为了防止幻像读取,SERIALIZABLE是唯一的方法.为什么没有明确的锁定语法来获取谓词锁?
据我所知,我不记得在Oracle,SQL Server,MySQL或PostgreSQL中看到任何这样的构造.
在 PostreSQL 中,可序列化隔离级别基于所谓的可序列化快照隔离,它使用谓词锁不是为了实际锁定,而是为了监视可能创建序列化异常的条件。该机制仅在 Serialized 级别起作用;无法在较低级别使用谓词锁。
但为了防止幻读,实际上只需要 PostgreSQL 中的可重复读隔离级别(尽管 SQL 标准对隔离级别有规定)。有关详细信息,请参阅文档。
至于Oracle,它根本没有谓词锁。它的 Serialized 隔离级别使用快照隔离(与 PostgreSQL 中的 Repeatable Read 相同),可以防止幻读,但允许其他序列化异常。
我没有关于 SQL Server 和 MySQL 的信息。
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |