【MySQL】乐观锁的实现

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 【MySQL】乐观锁的实现

序言


乐观锁是相对于悲观锁而言的。悲观锁大多数情况下是依靠数据库的锁机制实现的,悲观锁影响数据库的性能,而乐观锁是基于数据库版本记录机制来实现的。何谓数据库版本?即为数据库增加一个版本表示的字段,在读取数据的时候将版本号一同读出,在数据更细后,对此版本号加一。然后将提交的版本数据跟数据表对应记录信息进行对比,如果提交的数据版本号大于数据表的版本号,则更细。都这认为是过期数据


简言之:乐观锁和悲观锁是抽象的存在,并没有实际的锁,乐观锁就是没有使用实际的锁,而悲观锁使用了实际的锁,比如共享锁,排它锁


解决问题


在并发时,对于多个进程操作同一数据的操作,例如秒杀,修改库存情况


实现代码

// 乐观锁
// alter table count add column version char(20) default 0;
$prefix = 'd1d';
$sql = 'select * from count where prefix = "dz10021"';
$data1 = $db->query($sql);
$data2 = $db->query($sql);
var_dump('===>>>> data 1');
var_dump($data1);
var_dump('===>>>> data 2');
var_dump($data2);
// 修改数据 1
$sql1 = 'update count set count = 13,version = version + 1 where prefix = "dz10021" and version = '.$data1['version'];
var_dump($db->execute($sql1));
// 修改数据 2
$sql2 = 'update count set count = 14,version = version + 1 where prefix = "dz10021" and version = '.$data2['version'];
var_dump($db->execute($sql2));


分析代码

屏幕快照 2022-05-16 下午11.28.41.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
算法 关系型数据库 MySQL
【MySQL 解析】数据库的乐观锁和悲观锁实现原理
【1月更文挑战第11天】【MySQL 解析】数据库的乐观锁和悲观锁实现原理
|
关系型数据库 MySQL 数据库
MySQL 乐观锁和悲观锁区别
MySQL 乐观锁和悲观锁区别
251 0
|
关系型数据库 MySQL Java
【面试题精讲】Mysql如何实现乐观锁
【面试题精讲】Mysql如何实现乐观锁
|
Prometheus 监控 Cloud Native
手把手教你Prometheus + Granafa实现mysql 性能监测部署
数据库性能监控可以说是十分重要,能否自行搭建环境实现像阿里云或是腾讯云那样直观的展示不同维度数据的功能?答案是肯定的。下面详细说明一下安装部署过程以及过程中出现的问题,希望对你有所帮助!
手把手教你Prometheus + Granafa实现mysql 性能监测部署
|
关系型数据库 MySQL 数据库
MySQL 乐观锁和悲观锁区别
MySQL 乐观锁和悲观锁区别
210 0
|
算法 关系型数据库 MySQL
MySQL锁之较量:悲观锁与乐观锁的对决
【4月更文挑战第20天】
957 2
|
存储 SQL 关系型数据库
MySQl中的乐观锁是怎么实现的
MySQl中的乐观锁是怎么实现的
564 0
MySQl中的乐观锁是怎么实现的
|
SQL 关系型数据库 MySQL
MySql字符串拆分实现split功能(字段分割转列、转行)
MySql字符串拆分实现split功能(字段分割转列、转行)
MySql字符串拆分实现split功能(字段分割转列、转行)
|
关系型数据库 MySQL
Mysql中文汉字转拼音的实现
Mysql中文汉字转拼音的实现
797 0
|
SQL 缓存 关系型数据库
MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)

推荐镜像

更多