• mysql 锁


    https://mp.weixin.qq.com/s?__biz=MzA5Mjg2MDQ5NQ==&mid=2452509174&idx=1&sn=600a3d3622927dd8234d6fd66f603665&scene=21#wechat_redirect

    https://juejin.im/post/6871018035630342151 意向锁解析

    脏读:一个事务读到另外一个事务未提交的数据(可能会回滚)

    不可重复读:在同一个事务中,多次读取同一数据返回的结果不同,和脏读不同的是这里读取的是已经提交过后的

    幻读:同一事务多次读,读到的结果数量不一样,因为有可能其他事务插入了一些数据正好满足你读的条件,一个事务读到另一个事务已提交的insert数据

    事务隔离级别:

    隔离级别脏读不可重复读幻读
    未提交读(RUC) NO NO NO
    已提交读(RC) YES NO NO
    可重复读(RR) YES YES NO
    可串行化 YES YES YES

     

     

     

     

     

     

    InnoDB和其他数据库有点不同,InnoDB的可重复读其实就能解决幻读了 

    在InnoDb中实现了两个标准的行级锁,可以简单的看为两个读写锁:;

    一。S-共享锁:又叫读锁,其他事务可以加共享锁,但是不能加排它锁

    二。X-排它锁:又叫写锁,一旦加了写锁后,其他事务就不能加锁

    兼容性:是指事务A获得一个某行某种锁之后,事务B同样的在这个行上尝试获取某种锁,如果能立即获取,则称锁兼容,反之叫冲突

    纵轴是代表已有的锁,横轴是代表尝试获取的锁。

    .XS
    X 冲突 冲突
    S 冲突 兼容

    三。意向锁

    LOCK TABLE my_tabl_name READ; 用读锁锁表,会阻塞其他事务修改表数据。

    LOCK TABLE my_table_name WRITe; 用写锁锁表,会阻塞其他事务读和写

    意向锁在InnoDB中是表级锁,和他的名字一样他是用来表达一个事务想要获取什么。意向锁分为:

    IS-意向共享锁:表达一个事务想要获取一张表中某几行的共享锁;

    IX-意向排它锁:表达一个事务想要获取一张表中某几行的排它锁;

    这个锁有什么用呢?为什么需要这个锁呢? 首先说一下如果没有这个锁,如果要给这个表加上表锁,一般的做法是去遍历每一行看看他是否有行锁,这样的话效率太低,而我们有意向锁,只需要判断是否有意向锁即可,不需要再去一行行的去扫描。

    在InnoDB中由于支持的是行级的锁,因此InnboDB锁的兼容性可以扩展如下:

    .IXISXS
    IX 兼容 兼容 冲突 冲突
    IS 兼容 兼容 冲突 兼容
    X 冲突 冲突 冲突 冲突
    S 冲突 兼容 冲突 兼容

    四,自增长锁

  • 相关阅读:
    查看CLOUD系统级IIS日志
    采购订单设置采购部门为缺省值
    单据头数据复制到单据体
    CLOUD设置过滤方案不共享
    BZOJ 4773: 负环 倍增Floyd
    LOJ #539. 「LibreOJ NOIP Round #1」旅游路线 倍增floyd + 思维
    BZOJ 4821: [Sdoi2017]相关分析 线段树 + 卡精
    一些常用公式/技巧
    BZOJ 4517: [Sdoi2016]排列计数 错排 + 组合
    BZOJ 3162: 独钓寒江雪 树的同构 + 组合 + 计数
  • 原文地址:https://www.cnblogs.com/lhh-boke/p/13897794.html
Copyright © 2020-2023  润新知