我已经为事务设置了可序列化的事务隔离锁,但我观察到一些结果与预期不符。
我的查询是:
我的查询是:
update tabl1 set col2 = 10 where col1 > 10 and col1 < 20
这里的col1是主键。具有值为10、11、12……19、20的col1行将被锁定,以进行更新/插入操作。在where条件中,我已经给出了col1>10和col1<20的条件,但仍然会锁定col1=10和col1=20的行。
如果我只给出
update tabl1 set col2 = 10 where col1 => 10 and col1 <= 20
当col2的值在9到21之间时,相应的行将被锁定。那么为什么col1的值为9和21的行也会被锁定呢?
对于以下查询,整个表都会被锁定。这里col3是非主键列。如果where条件中的列不是主键,我不能设置锁吗?
update tabl1 set col2 = 10 where col3 > 10 and col3 < 20
WHERE
,SQL Server可以在任何一个上采取关键范围锁定并没有区别。 - Martin Smith