umn]>=2 AND [index_column]<=4) OR ([index_column]>=10 AND [index_column]<=16) OR ([index_column]>=30 AND [index_column]<=40)
这里想说明的问题是,我们的“范围”是指一个个的闭合的范围,要一个个套用规则进行分析,我们现在有3块儿闭合的范围,分别是 [2,4]、[10,16]、[30,40]。我们一个个的来,对于[2,4],在这个范围内2,3,4,5获得 Range S-S锁;
对于[10,16]范围,15,16,18获得 Range S-S锁;对于[30,40]范围,30,无限远获得 Range S-S锁,一共9个。

规则一补充:如果 WHERE 子句使用的是“相等”条件,但是该索引不是唯一索引,那么除了WHERE命中的索引获得 Range S-S锁之外,“下一个”索引也会获得 Range S-S锁。
对于WHERE子句中的条件不能命中任何记录的情况
规则三:如果 WHERE 子句使用的是“相等”条件,不论索引是否为唯一索引,若不能够命中任何记录,除该 WHERE 子句规定的那个不存在的记录作为 Range S-S的一部分之外,该记录的“下一个”索引值也将会获得 Range S-S 锁。
例如,我们执行
SELECT [data] FROM [MyTable] WHERE [index_column]=6
那么下一条索引记录为15所对应的索引,因此这个索引将会获得 Range S-S 锁。

又例如,我们执行
SELECT [data] FROM [MyTable] WHERE [index_column]=31
那么下一索引记录应该是“无限远”对应的索引,则这个索引将会获得 Range S-S 锁。

规则四:如果WHERE子句中使用“范围”条件,不论索引是否为唯一索引,若不能够命中任何记录,除该 WHERE 子句规定的那个不存在的范围作为 Range S-S的一部分外,该范围的“下一个”索引值也将会获得 Range S-S锁。
例如,我们执行
SELECT [data] FROM [MyTable] WHERE [index_column]>=6 AND [index_column]<=10
我实在是写不动了,请各位开动脑筋吧,这里直接给结果:

再来一个例子吧,我们执行
SELECT [data] FROM [MyTable] WHERE [index_column]>30 AND [index_column]<40
结果是:

好了,这一篇终于搞定了。下一篇我们到了 Range S-U 以及 Range I-N 这下会死锁了,有好戏看了
作者:夏天可是个好季节