美文网首页
MySQL(3):Mysql锁相关

MySQL(3):Mysql锁相关

作者: hcq0514 | 来源:发表于2023-11-01 15:07 被阅读0次

InnoDB存储引肇实现了如下两种标准的行级

  1. 共享锁(S Lock),允许事务读一行数据。
  2. 排他锁(X Lock),允许事务删除或更新一行数据

意向锁(InnoDB的意向锁都是级别的)

InnoDB存储引擎支持多粒度(granular)锁定,这种锁定允许事务在行级上的锁和表级上的锁同时存在。
简单来说意向锁就是加在表上面的粗粒度锁,在获取行锁之前需要先获取意向表锁,减少等待

举例来说,在对表1的记录r加X锁之前,已经有事务对表1进行了IS意向读锁,因为X锁跟IS锁不兼容,所以该事需要等待IS表锁操作的完成

  1. 意向共享锁(IS Lock),事务想要获得一张表中某几行的共享锁
  2. 意向排他锁(IX Lock),事想要得一张 表中某几行的排他锁


    image.png

XS锁冲突例子, for update加的X写锁, lock in share mode加的S读锁

事务A 事务A 事务A
begin begin
select * from account where id =1 for update; 事务A对account里面的id为1的数据加X写锁
select * from account where id =1 lock in share mode; 此时事务B尝试获取id为1的S共享锁
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 结果无法获取,锁冲突了

InnoDB里面的锁都是针对索引来说的(锁的是索引),如果没有的话行锁就会转为表锁

注:account 表里面有2个字段,分别是主键id,name

事务A 事务A 事务A
begin begin
select * from account where name = 't' for update; 事务A对account里面的name为t的数据加X写锁
INSERT INTO account(id, name) VALUES (5, 'te'); 此时事务B尝试写入一条数据
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 结果无法写入,说明事物A不止锁了 name = 't' 的数据,还锁了整张表

相关文章

  • MySQL二进制日志

    MySQL-day10 MySQL存储引擎-锁 1)什么是“锁”? 2)“锁”的作用是什么? 3)MySQL中的锁...

  • MS汇总

    数据库相关[MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)Mysql索引优化Mysql查询优化Mysq...

  • 分布式锁

    1,MySQL 排他锁 2,mysql 乐观锁 3,zk getchild 的 create distrutbit...

  • Mysql相关

    Mysql相关 Mysql并发控制-锁 共享锁 共享锁也称为读锁,读锁允许多个连接可以同一时刻并发的读取同一资源,...

  • 高性能Mysql笔记

    一、Mysql架构与历史 1、架构图 2、锁 表锁 行级锁 3、事务 死锁 Mysql中的事务 1

  • Mysql数据库

    MySQL知识图谱 MySQL索引 MySQL架构 MySQL锁 MySQL事务 MySQL集群 MySQL分库分...

  • MySQL学习笔记-2020面试题汇总

    1、MySQL 中有哪几种锁? 2、MySQL 中有哪些不同的表格? 3、简述在 MySQL 数据库中 MyISA...

  • Mysql的锁

    MySql锁的分类 Mysql里的锁大致可以分为全局锁、表级锁和行锁三类。 全局锁 Mysql 增加全局锁的方法:...

  • mysql锁和事务相关知识点

    梳理了mysql锁和事务相关知识点,如下图所示

  • Mysql 之 锁表与解表

    Mysql 之 锁表与解表 Mysql 查看锁表语句 mysql>show open tables where i...

网友评论

      本文标题:MySQL(3):Mysql锁相关

      本文链接:https://www.haomeiwen.com/subject/gdzwidtx.html