UPDATE和INSERT查询在执行查询时锁定相关的行/表。但是SELECT也会锁定表吗?还有哪些其他类型导致数据库锁这会因DB而异吗?
编辑: 添加了sql-server标签。什么是nolock有用吗?
答案 0 :(得分:3)
基本RTFM?
这是一个复杂的主题,请阅读大量文档。
如果连接和事务设置需要,SELECT会导致锁定。这是为了允许所谓的"可重复读取"在事务中,这意味着在读取事务提交或回滚之前不能更改读取行。
一切 - 字面意思 - 可能导致锁定。问题是大多数是在事务(或默认连接)设置中定义的。这是一个你必须在文档中阅读的部分,因为它不是一个页面" - 它涉及很多细节。它也可以在SELECT语句中更改(允许IGNORE锁定,例如当我说读取未提交时)。