美文网首页DB
mysql表级锁

mysql表级锁

作者: sunpy | 来源:发表于2022-09-13 15:09 被阅读0次

    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表级锁

        本文链接:https://www.haomeiwen.com/subject/ixlhortx.html