Sql 共享锁和独占锁哪个将首先获取数据?
假设我有以下几点: 选择-共享锁-长时间运行 更新-独占锁 选择-共享锁-长时间运行Sql 共享锁和独占锁哪个将首先获取数据?,sql,sql-server,locking,Sql,Sql Server,Locking,假设我有以下几点: 选择-共享锁-长时间运行 更新-独占锁 选择-共享锁-长时间运行 这三条语句是按顺序排列的,第一个select需要很长时间才能执行,在这段时间内,更新需要等待(冲突锁),然后是另一个select(兼容锁)。是否允许select获取该行?或者,更新是否从一行开始。如果第二个(或更多)选择被允许“切入”,并且也是长时间运行的,那么更新是否会以死锁告终?有没有一种方法可以防止这种情况发生,而不必将select锁升级到其他类型?假设每个语句都有自己的事务(即独立的、冲突的锁名称空间)
这三条语句是按顺序排列的,第一个select需要很长时间才能执行,在这段时间内,更新需要等待(冲突锁),然后是另一个select(兼容锁)。是否允许select获取该行?或者,更新是否从一行开始。如果第二个(或更多)选择被允许“切入”,并且也是长时间运行的,那么更新是否会以死锁告终?有没有一种方法可以防止这种情况发生,而不必将select锁升级到其他类型?假设每个语句都有自己的事务(即独立的、冲突的锁名称空间): 否,第三次选择不会在更新前“切入”。锁必须与等待列表中要授予的所有锁兼容。否则X锁将“饿死” 有一些小字:
- SELECT在默认读取提交隔离级别下不保留长的S锁
- 在某些特殊情况下,锁是在等待列表之前明确授予的(它们是“切入”),但这些情况从不适用于数据锁(即选择、更新和插入)
另请参见感谢您的精彩链接和解释。