MySQL Select For Update语句实现的行级锁定

命令行窗口一:

-- 设置事务不自动提交

set autocommit=0; 

-- 查询并锁定id='default' 的记录

select * from am_domain where id='default' for update;

命令行窗口二:

执行

select * from am_domain where id='default' for update;

update am_domain set ... where id='default'; 

delete from am_domain where id='domain';

都会卡主,等待锁释放,只有“命令行窗口一”commit提交事务后,“命令行窗口二”中的SQL语句才能继续。

说明:

命令行窗口一锁定指定记录时,

窗口二中,普通不包含for update的select语句是能正常执行的。

窗口二中,不涉及锁定记录(id !='default')的更新SQL也是可以执行。

猜你喜欢

转载自huangqiqing123.iteye.com/blog/2377401