如何避免数据库中的读锁?
欢迎回答多个数据库!
在 SQL Server 中,您可以在选择语句中使用 with(nolock) 关键字。例如:
Select table1.columna, table2.columna
from table1 with(nolock), table2 with(nolock)
确保为查询中的每个表/视图指定 with(nolock)。
Jeff Atwood 有一篇关于这个主题的好帖子:
在 Oracle 中,默认的操作模式是读取已提交隔离级别,其中选择语句不会被另一个修改它正在读取的数据的事务阻塞。从数据并发和一致性:
事务执行的每个查询只能看到在查询(而不是事务)开始之前提交的数据。Oracle 查询从不读取脏(未提交)数据。
在 Firebird 中,作者从不阻塞读者,也没有脏读。只有读提交和快照隔离级别。
它使用多代引擎(我相信像 oracle)而不是简单的页面或记录锁定。
PostgreSQL 还使用 MVCC(多版本并发控制),因此使用默认事务隔离级别(已提交读),您永远不应该阻塞,除非有人在数据库上进行维护(删除/添加列/表/索引/等) .