Mysql锁的实现原理及设计

一、锁的粒度

        1.行级锁: 

            (1)所有的当前读都要加排它锁。比如:select for update、update、delete。

            (2)是作用在索引上(聚簇索引&二级索引)。

            (3)唯一索引/非唯一索引*RC(提交读)/RR(可重复读),四种搭配情况不一样。需要注意。

        2.表级锁:

             (1)加锁场景:lock tables、全盘扫描(加锁之后Mysql Sercer会进行过滤,会尽快释放锁)。

             (2)尽量避免使用全盘扫描,虽然全盘扫描释放锁的过程很快,但是还是有加锁的过程。

        3.间隙锁: 

              (1)间隙锁不是作用在索引上的,是两个位置之间的GAP。

              (2)保证两次当前读返回的数据一致。

二、锁的类型

        1.共享锁(读锁):可以同时被多个事务获取,阻止其他事务对纪录的修改;

        2.排它锁(写锁):只能被一个事务获取,允许获得锁的事务进行修改;

三、死锁

       1.产生死锁的原因:两个或者多个事务对同一个资源相互占用,并请求锁定对方占用的资源,从而导致的一个恶性循环现象。

       2.InnoDb的处理方法:将持有最少行级排它锁的事务进行回滚。

四、锁的释放

      1.锁释放的时机:锁在事务提交(commit)时释放。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值