Mysql的锁

Mysql的锁

1.分类

1.1 按照范围

  • 表级锁
  • 行级锁

1.2 其他

  • 排它锁
  • 共享锁

image-20211119155024198l

注:创建表的时候一般使用InnoDB引擎;

2.排它锁

  • InnoDB引擎中,update、insert 、delete 的行为内部都会先申请锁(排它锁),申请到之后才执行相关的操作,最后在释放锁。

    所以,当多个人同时想数据库执行:insert、update、delete操作时,内部加锁后会排队逐一执行
    

    而select则默认不会申请锁。(查询不影响数据库的数据改变)

    SELECT * FROM XXX;
    

    select申请锁,需要配合 事务+特殊语法 实现

  • for update,排它锁,加锁之后其他不可以读写。

    begin;
    	select * from for update --表级锁
    commit;
    -- 完整的事务
    

    image-20211119162007878

​ 没有提交事务之前,锁会留住对应的语句排队执行;

  • image-20211119162047673
    提交完事务之后,执行对应的sql;

  • image-20211119162513097

  • 排它锁的应用场景

    image-20211119163411321

  • Python代码实现

    image-20211119163604928

3.共享锁

  • image-20211119162711701

  • 共享锁的使用场景

    image-20211119163843236

原文地址:https://www.cnblogs.com/Blogwj123/p/15578078.html