gpt4 book ai didi

mysql - 为什么不能通过显式锁定查询语法获取谓词锁

转载 作者:可可西里 更新时间:2023-11-01 06:49:49 36 4
gpt4 key购买 nike

大多数 RDBMS 允许在被选择的行上获取共享排他锁。例如,PostgreSQL 的语法如下:

SELECT * 
FROM post
WHERE id=10
FOR SHARE;

使用FOR SHARE,即使在READ_COMMITTED隔离级别我们也可以获得共享锁,并且可以在不实际使用REPEATABLE_READ事务隔离的情况下防止不可重复读取现象。

但是为了防止幻读,SERIALIZABLE 是唯一的方法。为什么没有显式锁定语法来同时获取谓词锁?

据我所知,我不记得在 Oracle、SQL Server、MySQL 或 PostgreSQL 中看到过任何此类结构。

最佳答案

在 PostreSQL 中,可序列化隔离级别基于所谓的 Serializable Snapshot Isolation ,它使用谓词锁不是为了实际锁定,而是为了监视可能导致序列化异常的条件。该机制仅适用于可序列化级别;无法在较低级别使用谓词锁。

但是为了防止幻读,您实际上只需要 PostgreSQL 中的可重复读取隔离级别(尽管 SQL 标准对隔离级别有何规定)。参见 the documentation了解详情。

至于Oracle,它根本没有谓词锁。其Serializable隔离级别使用快照隔离(与PostgreSQL中的Repeatable Read相同),可防止幻读但允许other serialization anomalies .

我没有关于 SQL Server 和 MySQL 的信息。

关于mysql - 为什么不能通过显式锁定查询语法获取谓词锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33024115/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com