Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 共享锁和独占锁哪个将首先获取数据?_Sql_Sql Server_Locking - Fatal编程技术网

Sql 共享锁和独占锁哪个将首先获取数据?

Sql 共享锁和独占锁哪个将首先获取数据?,sql,sql-server,locking,Sql,Sql Server,Locking,假设我有以下几点: 选择-共享锁-长时间运行 更新-独占锁 选择-共享锁-长时间运行 这三条语句是按顺序排列的,第一个select需要很长时间才能执行,在这段时间内,更新需要等待(冲突锁),然后是另一个select(兼容锁)。是否允许select获取该行?或者,更新是否从一行开始。如果第二个(或更多)选择被允许“切入”,并且也是长时间运行的,那么更新是否会以死锁告终?有没有一种方法可以防止这种情况发生,而不必将select锁升级到其他类型?假设每个语句都有自己的事务(即独立的、冲突的锁名称空间)

假设我有以下几点:

选择-共享锁-长时间运行

更新-独占锁

选择-共享锁-长时间运行


这三条语句是按顺序排列的,第一个select需要很长时间才能执行,在这段时间内,更新需要等待(冲突锁),然后是另一个select(兼容锁)。是否允许select获取该行?或者,更新是否从一行开始。如果第二个(或更多)选择被允许“切入”,并且也是长时间运行的,那么更新是否会以死锁告终?有没有一种方法可以防止这种情况发生,而不必将select锁升级到其他类型?

假设每个语句都有自己的事务(即独立的、冲突的锁名称空间):

否,第三次选择不会在更新前“切入”。锁必须与等待列表中要授予的所有锁兼容。否则X锁将“饿死”

有一些小字:

  • SELECT在默认读取提交隔离级别下不保留长的S锁
  • 在某些特殊情况下,锁是在等待列表之前明确授予的(它们是“切入”),但这些情况从不适用于数据锁(即选择、更新和插入)

另请参见

感谢您的精彩链接和解释。