一尘不染

SQL Server-[SELECT]会锁定[UPDATE]吗?

sql

我有一个复杂的选择查询和一个巨大的表。

我正在运行此select语句,同时有一条Update语句到达并尝试 更新 表。

恕我直言-更新需要 排他 锁-因此update语句将不得不 等待 select命令完成。

  1. 我对吗 ?

  2. 我该怎么才能做到:执行复杂的select并且 也让update命令运行( 目前我不在乎脏数据


阅读 154

收藏
2021-05-05

共1个答案

一尘不染

是的-在一定程度上。

多长时间,SELECT取决于事务的隔离级别上共享锁认为:

  • READ UNCOMMITTED-完全不获取共享锁-UPDATE不被阻止
  • READ COMMITTED-仅在读取数据期间获得共享锁-UPDATE可能在很短的时间内被阻止
  • REPEATABLE READ并且SERIALIZABLE-共享锁被获取并一直保留到事务结束-UPDATE被阻止直到SELECT事务结束

从技术上讲,该UPDATE语句首先在读取要更新的行的当前值的时间内获得一个UPDATE锁-与共享锁兼容(由所使用SELECT)。

完成后,该Update锁将升级为独占锁,以便将新数据写入表中。

2021-05-05