本文介绍 SELECT FOR UPDATE 的加锁行为。
适用版本
OceanBase 数据库所有版本
SELECT FOR UPDATE 的加锁行为
OceanBase 数据库 MySQL 模式中,可以通过 SELECT ... FOR UPDATE 为表加行级锁。如果使用了 LIMIT 1子句,则 OceanBase 数据库会在查询优化中将算子下压到表扫描的步骤中,只为 LIMIT 返回的行加锁。
obclient> SELECT * FROM $table_name LIMIT 1 FOR UPDATE;
但是,如果您使用了 ORDER BY 子句对查询结果进行排序,则 OceanBase 数据库会先对结果进行排序,然后再执行 LIMIT 1,因此这种情况下,会为选择的所有行加锁。
obclient> SELECT * FROM $table_name ORDER BY $col_name LIMIT 1 FOR UPDATE;