MySQL数据库的锁机制 和 执行状态解释

锁机制

MySQL数据库的锁机制是用来管理 并发访问 数据库的一种机制。通过锁定 数据、表或者表的部分内容 来控制对数据库对象的访问,以确保 一致性和完整性

MySQL数据库支持多种类型锁,包括 共享\排他锁、意向锁、插入意向锁、自增锁、记录锁、间隙锁、临键锁、悲观锁、乐观锁。

共享\排他锁(S\X锁)
  • 共享锁(S)

​ 共享锁用于 操作,共享锁之间是兼容的,即多个会话可以同时获取共享锁。

事例:多个数据同时读取同一张表的数据

-- 事务A获取共享锁
START TRANSACTION;
SELECT * FROM table_name WHERE condition FOR SHARE;
-- 事务B尝试获取共享锁(可以同时获取)
START TRANSACTION;
SELECT * FROM table_name WHERE condition FOR SHARE;
  • 排他锁(X)

​ 排他锁用于 操作,它与其他锁互斥,即一旦某个会话获取了排他锁,其他会话无法同时获取相同资源的任何锁。

事例:一个事务正在更新数据,其他事务无法写或读

-- 事务A获取排他锁
START TRANSACTION;
SELECT * FROM table_name WHERE condition FOR UPDATE;
-- 事务B尝试获取排他锁(等待事务A释放锁)
START TRANSACTION;
SELECT * FROM table_name WHERE condition FOR UPDATE;

意向锁

意向锁是一种 表级别 的锁,意味着事务在更细的粒度上进行加锁。且IX与IS兼容。

  • 意向共享锁(IS)

​ 事务想要获得一张表中某几行的共享锁;

  • 意向排他锁(IX)

​ 事务想要获得一张表中某几行的排他锁;

插入意向锁

插入意向锁是间隙锁的一种,专门真对insert操作的。即多个事务在同一个索引、同一个范围区间内插入记录时,如果插入的位置不冲突,则不会阻塞彼此;

自增锁

自增锁是一种特殊的 表级别 锁,专门针对事务插入AUTO-INCREMENT类型的列。即一个事务正在往表中插入记录时,其他事务的插入必须等待,以便第一个事务插入的行得到的主键值是连续的。

记录锁

记录锁是单个行记录上的锁,会阻塞其他事务对其插入、更新、删除;

间隙锁

间隙锁锁定记录的一个间隔,不包含记录本身

例子:

假如数据库已有ID为1、6两条记录,
现在想要在ID in (4,10)之间更新数据的时候,会加上间隙锁,锁住[4,5] [7,10] ,(不包含已有记录ID=6本身)
那么在更新ID=6的记录(只有一条记录)符合条件;
如果不加间隙锁,事务2有可能会在4、10之间插入一条数据,这个时候事务1再去更新,发现在(4,10)这个区间内多出了一条“幻影”数据。
间隙锁就是防止其他事务在间隔中插入数据,以导致“不可重复读”。

临键锁

临键锁是记录锁与间隙锁的组合,即:既包含索引记录,又包含索引区间,主要是为了解决幻读。

悲观锁

MySQL的排他锁也成为悲观锁,该锁对整张表或标号那个的某些行 进行排他性锁定以防止并发修改冲突,一旦数据库加上排他锁,则会使整张表或表中的某些行具备写写、写读排他性的效果。

乐观锁

MySQL也提供了乐观锁,一般有两种途径:建库时添加版本字段,或者更新表数据时按照先查再更新的方式执行。

执行状态解释

是指对数据库中正在执行的操作进行监视和分析,以了解操作的进展和性能情况。

在MySQL中,执行状态解释可以通过执行 SHOW PROCESSLIST 命令或查询 information_schema 系统数据库中的相关表来获得。执行状态解释会提供以下重要信息:

  • ID(连接标识):每一个数据库连接都有一个唯一的标识符

  • 用户:正在执行操作的用户名称

  • 主机:连接到数据库的主机名/IP地址

  • 数据库:正在使用的数据库名称

  • 命令:正在执行的操作类型,如select、insert、update、delete等

  • 状态:操作的当前状态,如sleep、query、locked等

  • 执行时间:操作已经执行的时间

  • SQL语句:正在执行的SQL语句或命令

  • 进程列表:当前连接的其他活动查询

通过这些,我们可以了解到 哪些操作正在执行、执行的进度如何以及是否有长时间运行的查询或锁定等问题。对识别潜在的性能问题以及进行相应的优化调整有帮助。

状态情况:

  1. ”sleep“:空闲连接、客户端暂停、等地锁定
  2. “query”:执行select查询、执行insert | update | delete 等更新操作、执行存储过程或函数、等待锁定
  3. “locked”:行级锁定、表级锁定、锁等待超时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值