关于sql:如何避免数据库中的读取锁?

关于sql:如何避免数据库中的读取锁?

How do I avoid read locks in my database?

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

欢迎回答多个数据库!


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

1
2
SELECT table1.columna, table2.columna
FROM table1 WITH(nolock), table2 WITH(nolock)

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


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


在《火鸟》中,作家永远不会阻止读者,也不会有脏读。仅读提交和快照隔离级别。
它使用多代引擎(我相信像oracle)而不是简单的页面或记录锁定。


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

Each query executed by a transaction sees only data that was committed before the query (not the transaction) began. An Oracle query never reads dirty (uncommitted) data.


杰夫·阿特伍德(Jeff Atwood)在这个主题上有一篇很好的文章:

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


推荐阅读