mysql锁之表级锁

InnoDB表锁 - 读锁(显示指定)


语句:

lock tabe 表名 read;

unlock table;

结论:

表级读锁/会话session 读操作 写操作
当前session 可以 报错
其他session 可以 阻塞等待

实验:

session1 session2
lock table edu_user read;
select * from edu_user; select * from edu_user;
update edu_user set username="张居正" where username = "张思德";
1099 - Table 'edu_user' was locked with a READ lock and can't be updated
阻塞:update edu_user set username="张居正" where username = "张思德";
unlock table;
执行:update edu_user set username="张居正" where username = "张思德";

说明:
当前session获取表级读锁后,不管是当前session还是其他session都只能读不能写。其他session如果想要写,那么会先阻塞,等表锁释放之后,会自动执行,但是不一定会成功,譬如主键冲突以及索引唯一等,写操作执行失败。

InnoDB表锁 - 写锁(显示指定)


语句:

lock tabe 表名 write;

unlock table;

结论:


表级写锁/会话session 读操作 写操作
当前session 可以 可以
其他session 阻塞等待 阻塞等待

实验:

session1 session2
lock table edu_user write;
select * from edu_user;
update edu_user set username="张居正" where username = "张思德";
阻塞:select * from edu_user;
阻塞:update edu_user set username = "杨树林" where username="杨幂";
unlock table;
执行:select * from edu_user;
执行:update edu_user set username = "杨树林" where username="杨幂";

说明:
当获取表锁write时,当前的session将可以进行读操作和写操作,其他session都将处于阻塞等待状态(不可以读也不可以写),其他session只有等当前表锁被释放才可以读写。

你可能感兴趣的:(mysql锁之表级锁)