1、select for update对row进行锁时,是对不同的connection,如果是同一个connnection那没作用。
例子:
1、用同一个mysql client 执行
select id from table_1 where id=1 for update; select id from table_1 where id=1 for update;
update id=3;
这不会锁,最后一个update会是最新数据
2、用两个mysql client 执行
select id from table_1 where id=1 for update; select id from table_1 where id=1 for update;
waiting....
第二个查询会block,直到第一个commit完成。
不过锁定(Lock)的数据是判别就得要注意一下了。由于InnoDB 预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL 才会执行Row lock (只锁住被选取的数据) ,否则MySQL 将会执行Table Lock (将整个数据表单给锁住)。
阅读(774) | 评论(0) | 转发(0) |