MySQL 锁机制

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL 锁机制


MySQL 锁机制

表锁

读锁

查看哪些表被加锁了

语法:show open tables

添加读锁

read 读锁关键字 | write 写锁关键字

语法:lock table 表名 read

解锁

语法:unlock table

场景一

当查询一加了读锁后,查询一无法进行查询其它表

-- 给student添加读锁
lock table student read
-- 当我们再去查询user表时,直接报错
select * from user

场景二

当我们去修改时,也会报错,因为加的是读锁

update student set StudentName = '小花3' where Id = 1

场景三

查询二(新建查询)中可以去查询其它表,但是修改当前表会进入阻塞状态(一直进行查询,指到解锁之后)

update student set StudentName = 'XXX5' where Id = 1

总结

加了表锁之后,查询1无法进行查询其它表(相当于这次借的钱没还,下次又来借钱,肯定是不借),查询1不能修改当前已经被锁表和其它表,会导致报错,除非解锁后回复正常操作

在查询1加了表锁之后,查询2可以查询其它表,但不能修改其它表和当前已经锁的表,修改当前锁的表会导致一直阻塞,除非解锁后回复正常操作

写锁

场景一
--给student添加写锁
lock table student write;

查询一:可以查询当前student,但是不能查询其它表(user…)

场景二

查询一:可以修改当前表,不能修改其它表

update student set StudentName = 'XXX2' where Id = 1
场景三

查询二:不可以查询当前student,可以查询其它表(user…)

select * from student

总结

查询一添加写锁后,查询一:可以查询当前student,但是不能查询其它表(user…),查询一:可以修改当前表,不能修改其它表,查询二:不可以查询当前student,可以查询其它表(user…)

行锁

场景一

查询一和查询二分别设置关闭自动提交

语法:set autocommit = 0;

设置(打开)自动提交

语法:set autocommit = 1;

当查询一修改完数据后,查询二中无法进行查看

查询二:执行完commit后

查询一:执行完commit后,再次查询既可看到更新后的数据

场景二

当查询二修改数据后,未进行commit时,查询一不能修改当前查询二修改的那台未进行commit时的数据,否则导致阻塞,只能等待

只要当查询二commit后,查询一才能看到更改后的数据

总结

当双方同时修改同一行数据时,修改完后必须要进行手动提交commit,对方才可以看到你修改的数据,否则你修改完后,别人是看不到的,别人也无法修改当前这条数据,否则就会出现阻塞

间隙锁

间隙锁

当我们用范围条件检索数据,并请求共享或排他锁时,InnODB会给符合条件的已有数据记录的索引项加锁:对于键值在条件范围内但并不存在的记录

这种锁机制就是所谓的间隙锁(Next-Key锁)

缺点

当锁定一个范用键值之后,即使某些不存在的键值也会被无辜的锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据。在某些场景下这可能会对性能造成很大的危害(造成间隙锁后,锁定键值范围内的数据无法插入和修改)

如何锁定一行

当前查询一窗口的某行数据被锁定时,查询二窗口无法进行修改数据,当查询一修改完提交后,查询二可以修改

语法:selectfrom test_innodb_lock where a=8 for update

只需加上 for update 关键字即可

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
207 4
|
6天前
|
监控 关系型数据库 MySQL
MySQL锁机制与解决死锁问题
MySQL锁机制与解决死锁问题
20 5
|
6天前
|
存储 关系型数据库 MySQL
深入解析MySQL数据存储机制:从表结构到物理存储
深入解析MySQL数据存储机制:从表结构到物理存储
14 1
|
5天前
|
存储 SQL 关系型数据库
MySQL 的锁机制,那么多的锁,该怎么区分?
MySQL 的锁机制,那么多的锁,该怎么区分?
15 0
|
28天前
|
关系型数据库 MySQL 数据库
Mysql的锁
本文介绍了MySQL中表级锁和行级锁的区别,其中MyISAM仅支持表级锁,而InnoDB支持表级锁和行级锁,默认为行级锁。表级锁锁定整个表,实现简单,资源消耗少,但并发度低;行级锁仅锁定相关记录,减少冲突,提高并发度,但加锁开销大。此外,还介绍了共享锁和排他锁的概念及意向锁的作用。
|
2月前
|
监控 关系型数据库 MySQL
在Linux中,mysql的innodb如何定位锁问题?
在Linux中,mysql的innodb如何定位锁问题?
|
2月前
|
存储 SQL 关系型数据库
深入MySQL锁机制:原理、死锁解决及Java防范技巧
深入MySQL锁机制:原理、死锁解决及Java防范技巧
|
2月前
|
存储 SQL 关系型数据库
深入解析MySQL事务机制和锁机制
深入解析MySQL事务机制和锁机制
|
2月前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
53 6
|
2月前
|
存储 SQL 关系型数据库
MySQL中的update操作与锁机制
本文探讨MySQL中`UPDATE`操作的自动加锁机制及其对数据一致性的保障作用。尤其在InnoDB存储引擎下,系统会在涉及索引的更新操作中加行锁或间隙锁,防止多事务并发修改同一条记录。通过福利码兑换系统的实例展示,当线程A开启事务更新库存时,线程B试图更新相同记录会被阻塞,直至线程A提交。此外,文章还介绍了乐观锁及版本号控制等策略进一步提升并发性能的方法。作者:小明爱吃火锅,来源:稀土掘金。
140 2
下一篇
无影云桌面