欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL 事务下

程序员文章站 2022-03-04 23:50:46
...

接上篇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锁。

三、锁的作用

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

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

四、死锁的避免

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

相关标签: SQL mysql