侧边栏壁纸
博主头像
DJ's Blog博主等级

行动起来,活在当下

  • 累计撰写 133 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

【MySQL】锁简介

Administrator
2022-03-14 / 0 评论 / 0 点赞 / 55 阅读 / 2387 字

【MySQL】锁简介

概述

种类功能锁定粒度加锁效率冲突概率并发性能基本模式(lock mode)
行锁锁住表里面的一行数据Shared Locks & Exclusive Locks
表锁锁住一张表中的数据Intention Shared Locks & Intention Exclusive Locks

共享锁(Shared Locks)

概念

也叫做读锁,获取了读锁以后,可以读取数据。多个事务可以共享一把读锁。

不要在加上了读锁以后去写数据,不然的话可能会出现死锁的情况

加锁

可以用如下命令手工添加读锁

select …… lock in share mode

释放锁

  • session断开
  • commit
  • rollback

验证

如下图所示,事务1对id=1这条数据添加了读锁,事务2还能再对这条数据添加读锁

排他锁(Exclusive Locks)

概念

也叫做写锁,获取了写锁之后,可以操作数据。

只要一个事务获取了一行数据的写锁,其他的事务就不能再获取这一行数据的写锁和读锁。

加锁

  • 自动添加:我们在操作数据的时候,包括增删改,都会默认加上一个排它锁。
  • 手工添加:可以用FOR UPDATE手工添加写锁
SELECT * FROM student where id=1 FOR UPDATE;

释放锁

  • session断开
  • commit
  • rollback

验证

如下图所示,事务1对id=1这条数据添加了写锁,事务2无法再对这条数据添加写锁和读锁。

意向共享锁(Intention Shared Locks)

意向排他锁(Intention Exclusive Locks)

行锁原理

不使用索引

主键索引

唯一索引

行锁算法

记录锁

间隙锁

临键锁

事务隔离级别的实现

事务隔离级别的选择

查看锁信息(日志)

死锁

锁等待时间
条件
演示
避免死锁

0

评论区