封锁

MySQL中提供了两种封锁粒度:行级锁和表级锁。
应该尽量只锁定需要修改的那部分数据,而不是所有的资源。锁定的数据量越少,并发锁争用的可能性越小,系统的并发程度越高。
但是加锁需要消耗资源,锁的各种操作(包括获取锁、释放锁、以及检查锁状态)都会增加系统开销。因此封锁粒度越小,系统开销越大。
在选择封锁粒度时,需要在锁开销和并发程度之间做一个权衡。
封锁类型
1.读写锁

  • 排它锁(Exclusive),简写为X锁,又称写锁。
  • 共享锁(Shared),简写为S锁,又称读锁。
    有以下两个规定:
  • 一个事务对数据对象A加了X锁,就可以对A进行读取和更新。加锁期间其它事务不能对A加任何锁。
  • 一个事务对数据对象A加了S锁,可以对A进行读取操作,但是不能进行更新操作。加锁期间其它事务能对A加S锁,但不能加X锁。
    2.意向锁
    使用意向锁可以更容易地支持多粒度封锁。
    在存在行级锁和表级锁的情况下,事务T想对表A加X锁,就需要先检查是否有其它事务对表A或者表A中的任意一行加了锁,那么就需要对表A的每一行都检查一次,这是非常耗时的。
    意向锁在原来的X/S锁之上引入了IX/IS,IX/IS都是表锁,用来表示一个事务想要在表中某个数据行上加X锁或S锁。有以下两个规定:
  • 一个事务在获得某个数据行对象的S锁之前,必须先获得锁的IS锁或者更强的锁;
  • 一个事务在获得某个数据行对象的X锁之前,必须先获得锁的IX锁。
    通过引入意向锁,事务T想要对表A加X锁,只需要先检测是否有其它事务对表A加了X/IX/S/IS锁,如果加了就表示有其它事务正在使用这个表或者表中某一行的锁,因此事务T加X锁失败。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值