首页 > 数据库 >mysql 锁 记录

mysql 锁 记录

时间:2024-09-28 16:47:06浏览次数:7  
标签:记录 lock 间隙 id mysql 90 100 250

 

表级别锁

1.表锁

lock tables xx read.  线程只能读

lock tables xx write 其他线程无法读写 

 

2.MDL锁(元数据锁

 MDL 是为了对表执行 CRUD 操作时,防止其他线程对这个表结构做了变更 ,反之亦然

注意 MDL 是在事务提交后才会释放, 因此长事务可能导致 修改表操作 阻塞 

 

 3. 意向锁

   给记录加锁时,会给表级别加个特别的锁

  意向锁的目的是为了快速判断表里是否有记录被加锁 ,例如判断能否加表写锁

行锁

 select ... lock in share mode 读锁

 select ... for update 写锁

 

record lock(记录锁)

 

 

间隙锁

next-key lock

 

在 MySQL 中使用 SELECT * FROM users WHERE id BETWEEN 100 AND 250 FOR UPDATE 时,id = 100 和 id = 250这两个具体的行会被如何锁定,取决于数据库的索引、隔离级别以及锁类型的行为。

具体行为

  1. 有索引的情况下:
    • id = 100 和 id = 250:这两行会被**行锁(Record Lock)**明确锁定,因为它们在查询的范围内。FOR UPDATE 语句会对 id = 100 和 id = 250 的行加上排他锁(X 锁),使其他事务不能修改或删除这些行。
    • 间隙锁(Gap Lock):除了锁定 id = 100 和 id = 250 的行外,MySQL 还会使用 Next-Key Lock,即在索引的情况下,它会锁定 100 到 250 之间的行和间隙,防止其他事务在此范围内插入新行。
    • Next-Key Lock 行为:在 REPEATABLE READ 隔离级别下,锁的范围包括 id = 100 之前的间隙(假设上一个 id 是 90),锁定 [90, 100] 的间隙,以及 id = 250 和下一个 id 的间隙。

示例:

假设表中有以下 id 值:

bash id: 90, 100, 120, 150, 200, 250, 300

执行 SELECT * FROM users WHERE id BETWEEN 100 AND 250 FOR UPDATE 后:

  • 行锁id = 100id = 120id = 150id = 200id = 250 的行会被锁住。
  • 间隙锁:锁定 90 < id < 100 和 250 < id < 300 之间的间隙,防止其他事务在这些间隙内插入新行。

 

标签:记录,lock,间隙,id,mysql,90,100,250
From: https://www.cnblogs.com/towboa/p/18438114

相关文章

  • [题目记录]一本通高手训练-01背包
    题意有\(n\)个物品,每个物品体积为\(s_i\),价值为\(v_i\),求背包容量为\(1,2,\cdotsm\)时最大价值.\(n\le1e6,m\le1e5,s\le300,v\le1e9\)时空限制\(5s,512MB\)题解普通01背包复杂度\(O(nm)\),无法满足\(n\le1e6,m\le1e5\).发现\(s\le300\),可以考虑......
  • CSP & NOIP 模拟赛记录
    9.18(lanos212)T1签到,10mins内过了。T2乍一看有点困难,题目太形式化,不太直观,先跳过去思考T3了,T3没有什么DP的思路,但是这种题显然需要DP。看了一眼T4,被一堆式子糊脸恶心了,没有怎么思考。接下来一个小时在思考T2和T3,突然发现T2只需要每次求最短路就可以了,那么就是......
  • 数据库技术提升-MySQL数据库原理、设计与应用【1.4】
    4.新增字段对于已经创建好的数据表,也可以根据业务需求利用ADD新增字段,基本语法格式如下·语法格式1:新增一个字段,并可指定其位置ALTERTABLE数据表名ADD[COLUMN]新字段名字段类型[FIRSTIAFTER字段名]语法格式2:同时新增多个字段ALTERTABLE数据表名ADD[COLUM......
  • 数据库技术提升-MySQL数据库原理、设计与应用【1.6】
    3.1.3字符串类型MySQ1.中的字符串类型分为CHAR、VARCHAR、TEXT等多种类型,不同数据类型具有不同的特点,具体如表3-5所示。1.CHAR和VARCHAR类型CHAR和VARCHAR类型都用来保存字符串数据。不同的是,VARCHAR可以存储可变长度的字符串。在MySQ1.中,定义CHAR和VARCH......
  • 数据库技术提升-MySQL数据库原理、设计与应用【1.5】
    第3章数据类型与约束学习目标掌握MySQL中常用数据类型的使用掌握MySQl.中常用的束的使用掌握MySQL中字符集的设置与处理        在数据库中,数据表用来组织和保存各种数据,它是由表结构和数据组成的。在设计表结构时,经常需要根据实际需求,选择合适的数据类型......
  • DC00020基于springboot新闻网站系统java web项目MySQL新闻管理系统
    1、项目功能演示DC00020基于springboot新闻网站系统javaweb项目MySQL2、项目功能描述  基于springboot+vue新闻网站包括用户和系统管理员两个角色。2.1用户功能1、用户登录、用户注册2、新闻信息:点赞、点踩、收藏、查看3、用户分享:点赞、点踩、收藏、查看、添加......
  • 数据库 - MySQL的事务
    目录前言一、事务的特性(一)原子性(二)一致性(三)隔离性(四)持久性二、事务的控制语句三、事务隔离级别(一)读未提交(二)读已提交(三)可重复读(四)可序列化四、使用场景五、事务操作(一)开启事务(二)提交事务(三)回滚事务(四)示例六、自动提交模式七、隐式提交八、提交前的保存点......
  • mysql 0928 DDL表操作
    `ALTERTABLEempaddnicknameVARCHAR(20)COMMENT'昵称';--添加字段nicknameDESCTABLEemp;--查看表ALTERTABLEempMODIFYnicknamevarchar(10);--修改数据类型ALTERTABLEempchangenicknameusernameVARCHAR(30);--修改字段nickname为usernameALT......
  • MySQL --用户管理
    文章目录1.用户1.1用户信息1.2创建用户1.3删除用户1.4修改用户密码2.数据库的权限2.1给用户授权2.2回收权限如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。1.用户1.1用户信息MySQL中的用户,都存储在系统数据库mysql的user表中u......
  • 【MySQL】MySQL MVCC并发控制的原理、不可重复度、读已提交
    1.概述上一篇文章:【MySQL】MySQL脏读、幻读以及不可重复读、我真的不会读在介绍MVCC并发控制的原理之前,我们先普及两个知识点。要解决并发问题只有一种方案就是加锁。当然,锁不可避免的会导致性能下降,但是,锁也有乐观和悲观之分,上一讲我们聊到的,隔离级别中的串行化就是......