6

如何避免数据库中的读锁?

欢迎回答多个数据库!

4

5 回答 5

3

在 SQL Server 中,您可以在选择语句中使用 with(nolock) 关键字。例如:

Select table1.columna, table2.columna
from table1 with(nolock), table2 with(nolock)

确保为查询中的每个表/视图指定 with(nolock)。

于 2008-08-31T21:01:20.623 回答
2

Jeff Atwood 有一篇关于这个主题的好帖子:

http://www.codinghorror.com/blog/archives/001166.html

于 2008-08-31T21:03:29.760 回答
2

在 Oracle 中,默认的操作模式是读取已提交隔离级别,其中选择语句不会被另一个修改它正在读取的数据的事务阻塞。从数据并发和一致性

事务执行的每个查询只能看到在查询(而不是事务)开始之前提交的数据。Oracle 查询从不读取脏(未提交)数据。

于 2008-08-31T21:21:44.507 回答
2

在 Firebird 中,作者从不阻塞读者,也没有脏读。只有读提交和快照隔离级别。
它使用多代引擎(我相信像 oracle)而不是简单的页面或记录锁定。

于 2008-08-31T21:43:03.987 回答
2

PostgreSQL 还使用 MVCC(多版本并发控制),因此使用默认事务隔离级别(已提交读),您永远不应该阻塞,除非有人在数据库上进行维护(删除/添加列/表/索引/等) .

于 2008-09-01T04:04:17.190 回答