数据库并发控制、悲观锁(Pessimistic Lock)、乐观锁(Optimistic Lock)、排他锁(Exclusivelocks X锁)、共享锁(Shared Lock S锁)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 数据库并发控制、悲观锁(Pessimistic Lock)、乐观锁(Optimistic Lock)、排他锁(Exclusivelocks X锁)、共享锁(Shared Lock S锁)

@[toc]

5.数据库并发控制

5.5锁

  从数据库系统角度

5.5.1 共享锁(Shared Lock S锁)

  读锁,保证数据只能读取,不能被修改。
  如果事务A对emp1表加上S锁,则事务A可以读emp1表但不能修改emp1表,其他事务(这里用事务B)只能对emp1表再加上S锁,不能加X锁,直到事务A释放了emp1表上的S锁,保证了其他事务(事务B)可以读emp1表,但在事务A释放emp1表上的S锁之前不能对emp1表进行任何修改。

5.5.1.1数据准备

CREATE TABLE emp1(
    id INT PRIMARY KEY,
    name VARCHAR(20),
    sal INT
);

INSERT INTO emp1 VALUES(1,'张三',15000)
                                            ,(2,'李四',20000);

5.5.1.2展示

  • 1.打开两个cmd,然后进入mysql里面

以下操作两个cmd都需要操作

mysql -u root -p

在这里插入图片描述

  • 2.查询事务提交模式

在这里插入图片描述
1为自动提交,2为手动提交。

  • 3.设置事务为手动提交,方便证明上诉结论(mysql默认为自动提交,执行单句sql其实包含 开启事务,执行sql,提交事务,3个步骤)。

在这里插入图片描述

  • 4.客户端A开启一个事务A。

在这里插入图片描述

  • 5.客户端A给emp1表加上读锁。

在这里插入图片描述

  • 6.查询emp1表原有的数据(加上S锁后,可以读数据)。

在这里插入图片描述

  • 7.事务A修改数据(加上S锁后,无法修改数据)。

在这里插入图片描述

  • 8.B客户端开启事务B。

在这里插入图片描述

  • 9.事务B对emp1查询(因为是S锁,其他事务可以对记录A进行SELECT )。

在这里插入图片描述

  • 10.事务B对记录emp1加读锁(事务A对记录A加上S锁后,事务B同样也可以对记录A加上S锁,证明了,MySQL里的读锁就是S锁,具有共享)。
  • 在这里插入图片描述
  • 11.事务B对记录emp1加写锁(一直处于等待状态,被挂起
  • 在这里插入图片描述
  • 12.事务B对记录emp1修改(一直处于等待状态,被挂起)。

在这里插入图片描述

  • 13.事务A释放emp1上的S锁。

在这里插入图片描述

此时事务B才得到响应。

在这里插入图片描述

说明了,只有释放了读锁,另外一个事务才能加写锁,或者更新数据。

5.5.2 排他锁(Exclusivelocks X锁)

  写锁,若事务A对emp1表加上X锁,事务A可以读emp1表也可以修改emp1表,其他事务(事务B)不能再对emp1表加任何锁,直到事务A释放emp1表上的锁,保证了其他事务(事务B)在事务A释放emp1表上的锁之前不能再读取和修改emp1表。

  • 1.客户端A设置手动提交,并且开启事务A。

在这里插入图片描述

  • 2.客户端B设置手动提交,并且开启事务B。

在这里插入图片描述

  • 3.事务A给emp1表加上X锁。

在这里插入图片描述

  • 4.事务A可以读emp1表也可以修改emp1表。

在这里插入图片描述

  • 5.事务B不能对emp1表加任何锁。

在这里插入图片描述
在这里插入图片描述

  • 6.事务B也不能对emp1表进行查询和修改。

在这里插入图片描述
在这里插入图片描述

  • 7.事务A释放emp1表上的X锁。

在这里插入图片描述

  • 8.事务B阻塞的进程被执行,中断了9.69秒。

在这里插入图片描述

从程序员角度

  • 悲观锁(Pessimistic[ˌpesɪˈmɪstɪk] Lock)

  对数据被外界修改保持保守态度,在整个数据处理过程中,数据处于锁定状态,依赖于数据库提供的锁机制。

  • 乐观锁(Optimistic[ˌɑ:ptɪˈmɪstɪk]Lock)

  采用宽松的加锁机制,基于数据版本记录机制,具体做法:数据库表增加一个"version"字段来实现,读取数据时,将版本号一同读出,之后更新,对版本号加1,将提交数据的版本数据与数据库对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库的数据,则予以更新,否则,被认为是过期数据。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
8月前
|
SQL 存储 关系型数据库
数据库的行级锁与表锁?
表锁: 不会出现死锁,发生锁的冲突几率高,并发性低。 存储引擎在进行SQL数据读写请求前,会对涉及到的表进行加锁。 其中锁分为共享读锁和独占写锁:读锁会阻塞写,写锁会阻塞读和写。 行级锁: 会出现死锁,发生锁的冲突几率低,并发性高。 InnoDB引擎支持行锁,与Oracle不同,MySQL的行锁是通过索引加载的,也就是说,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁,此时其它事务无法对当前表进行更新或插入操作。 行级锁注意事项: 行级锁必须有索引才能实现,否则会自动锁全表,那就不是行锁了。 两个事务不能锁同一个索引。 in
|
9月前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
383 25
|
8月前
|
数据建模 数据库
|
11月前
|
SQL 存储 关系型数据库
数据库的行级锁与表锁?
表锁:存储引擎在SQL数据读写请求前对涉及的表加锁,分共享读锁和独占写锁,读锁阻塞写,写锁阻塞读写,易发锁冲突,并发性低。行级锁:InnoDB支持,通过索引加锁,提高并发性,但可能引起死锁,需注意索引使用,适用于避免不可重复读场景。
201 21
|
架构师 数据库
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
|
12月前
|
SQL Oracle 关系型数据库
南大通用GBase 8s 数据库封锁与并发事务调度介绍
南大通用GBase 8s 数据库封锁与并发事务调度介绍
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
316 2
|
监控 数据库 索引
避免锁等待超时对数据库性能的影响
【10月更文挑战第16天】避免锁等待超时对数据库性能的影响需要综合考虑多个方面,通过不断地优化和改进,来提高数据库的并发处理能力和稳定性。
218 1
|
存储 关系型数据库 MySQL
MySQL数据库锁:共享锁和独占锁
本文详细介绍了`InnoDB`存储引擎中的两种行级别锁:共享锁(S锁)与排他锁(X锁)。通过具体示例展示了这两种锁的工作机制及其在`InnoDB`与`MyISAM`引擎中的表现差异。文章还提供了锁的兼容性矩阵,帮助读者更好地理解锁之间的互斥关系。最后总结了两种锁的特点及适用场景。适合希望深入了解`MySQL`并发控制机制的读者阅读。
475 1

热门文章

最新文章