当前位置: 首页 > news >正文

关系型数据库通过sql语句实现悲观锁与乐观锁

pgsql建表语句(MySql同理):

-- public.newtable definition-- Drop table-- DROP TABLE public.newtable;CREATE TABLE public.newtable (id varchar NULL,"name" varchar NULL,count int4 NULL,t_version int4 NULL
);

悲观锁:

----关系型数据库实现悲观锁(select for update)----开启事务
begin;
----锁定目标行(其他事务尝试锁定同一行会被阻塞;id:目标id)
select id,name,count,t_version from newtable where id='1' for update ;
----执行更新操作(锁定期间保证数据独占)
update newtable set count =count-1 where  id='1';
----提交事务(释放锁)
commit;


乐观锁:

----关系型数据库实现乐观锁(使用version版本号字段控制,and t_version=1这里的版本号是当前事务之前最近查询到的版本号)
----获取最新版数据
select id,name,count,t_version from newtable where id='1';
----开启事务
begin;
update newtable set count=count-1,t_version =t_version +1 where id='1' and t_version=1;
----提交事务(释放锁)
commit;

http://www.lqws.cn/news/105409.html

相关文章:

  • Golang 依赖注入:构建松耦合架构的关键技术
  • 原始数据去哪找?分享15个免费官方网站
  • 用AI(Deepseek)做了配色网站-功能介绍【欢迎体验】
  • 力扣HOT100之多维动态规划:1143. 最长公共子序列
  • 52. N 皇后 II【 力扣(LeetCode) 】
  • Leetcode - 周赛 452
  • 动态规划-647.回文子串-力扣(LeetCode)
  • LeetCode 152. 乘积最大子数组 - 动态规划解法详解
  • 代码随想录60期day56
  • Android Kotlin 算法详解:链表相关
  • SpringBoot核心注解详解及3.0与2.0版本深度对比
  • java复习 02
  • 2.3 关于async/await的原理介绍
  • IBM DB2分布式数据库架构
  • Baklib内容中台AI重构智能服务
  • 秋招准备-数据结构
  • Java-IO流之字节输入流详解
  • MFC Resource.h 文件详解与修改指南
  • 网络安全-等级保护(等保)3-0 等级保护测评要求现行技术标准
  • 强制卸载openssl-libs导致系统异常的修复方法
  • C++仿RabbitMQ实现消息队列
  • WINUI——Magewell视频捕捉开发手记
  • RabbitMQ在SpringBoot中的应用
  • Easyui悬停组件
  • 机器学习——放回抽样
  • Vue3中Axios的使用-附完整代码
  • 12、企业应收账款(AR)全流程解析:从发票开具到回款完成
  • BugKu Web渗透之game1
  • 倚光科技:Zernike自由曲面转菲涅尔,反射镜及透镜加工技术革新
  • 鸿蒙5.0项目开发——横竖屏切换开发