トランザクションに対してシリアル化可能なトランザクション分離ロックを設定しましたが、予期しない結果がいくつか見られます。
私のクエリは
update tabl1 set col2 = 10 where col1 > 10 and col1 < 20
ここで、col1 は主キーです。ここでは、col1 の値が 10,11,12....19,20 の行が更新/挿入のためにロックされています。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