大多数关系型数据库管理系统允许在选择的行上获取共享或独占锁。例如,PostgreSQL有这样一种语法:
SELECT *
FROM post
WHERE id=10
FOR SHARE;
使用FOR SHARE,即使在READ_COMMITTED隔离级别下,我们也可以获取共享锁,并且可以防止非重读现象,而不必实际使用REPEATABLE_READ事务隔离。
但是为了防止幽灵读取,SERIALIZABLE是唯一的方法。为什么没有明确的锁定语法来获得谓词锁呢?
据我所知,在Oracle、SQL Server、MySQL或PostgreSQL中都没有看到这样的结构。