在MySQL中,可以使用select ... for update来锁定数据。不过这个用法有一些注意事项:
1) for update 是基于InnoDB的;
2) for update 必须在事务块中才能生效;
3) 由于InnoDB的预设值是 Row-Level Lock, 所以如果:
才能执行Row-Level Lock,否则会执行Table-Level Lock。
例如:
1) 明确指定主键,且有此记录;
select * from Table1 where PK_field=22 for update;
这样是Row-Level Lock;
2) 明确指定主键,且无此记录;
select * from Table1 where PK_field=22 for update;
这样是non-lock;
3) 不明确指定主键;
select * from Table1 where PK_field!=22 for update;
或者
select * from Table1 where PK_field like '22' for update;
这样是table-Level Lock;