MySQL 事务下

接上篇Mysql 事务上




一、锁的基本类型

行锁,表锁

类别性能
锁定粒度表锁 > 行锁
加锁效率表锁 > 行锁
冲突概率表锁 > 行锁
并发性能表锁 < 行锁

表锁

lock tables xxx read;
lock tables xxx write;
unlock tables ;

行锁

共享锁(行锁) : Shared Locks
排它锁(行锁) : Exclusive Locks
意向共享锁(表锁) : Intention Shared Locks
意向排它锁(表锁) : Intention Exclusive Locks

二、常用锁介绍

行锁之共享锁(Shared Locks)
共享锁:又称为读锁, 简称S锁, 顾名思义, 共享锁就是多个事务对于同一数据可
以共享一把锁, 都能访问到数据, 但是只能读不能修改;
加锁释锁方式:

select * from student where id=1 LOCK IN SHARE MODE;
commit/rollback;

行锁之排它锁(Exclusive Locks)
排它锁又称为写锁, 简称X锁, 排他锁不能与其他锁并存, 如一个事务获取了一
个数据行的排他锁, 其他事务就不能再获取该行的锁(共享锁、 排他锁) , 只有
该获取了排他锁的事务是可以对数据行进行读取和修改。
加锁释锁方式:

自动: delete / update / insert 默认加上X锁;
手动: select * from student where id=1 FOR UPDATE;
commit/rollback

表锁之意向共享锁(IS) / 意向排它锁(IX)
意向锁是由数据引擎自己维护的, 用户无法手动操作意向锁 。

  • 意向共享锁(Intention Shared Lock, 简称IS锁)
    表示事务准备给数据行加入共享锁, 也就是说一个数据行加共享锁前必须先取得该表的IS锁。
  • 意向排他锁(Intention Exclusive Lock, 简称IX锁)
    表示事务准备给数据行加入排他锁, 说明事务在一个数据行加排他锁前必须先取得该表的IX锁。

三、锁的作用

索引使用锁情况
不使用索引锁全表
主键索引
唯一索引

在这里插入图片描述
在这里插入图片描述
RC和RR的主要区别:
1、 RR的间隙锁会导致锁定范围的扩大。
2、 条件列未使用到索引, RR锁表, RC锁行。
3、 RC的“半一致性” (semi-consistent) 读可以增加update操作的并发性。

四、死锁的避免

1) 顺序访问
2) 数据排序
3) 申请足够级别的锁
4) 避免没有where条件的操作
5) 大事务分解成小事务
6) 使用等值查询而不是范围查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值