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

mysql事务和行锁

给id等于1的加行锁
事务提交或,行锁自动解开

1、For Update只能应用于SELECT语句中。
2、对于使用了For Update的SELECT语句,只有当事务提交或回滚时,所加的锁才会被释放。
3、在使用For Update时,要确保事务的隔离级别为Serializable级别,因为只有这个级别能够保证数据的完整性和一致性。

-- 开启事务
START TRANSACTION;

SELECT * FROM table_name WHERE id = 1 FOR UPDATE;

UPDATE table_name SET column_name = 'new_value' WHERE id = 1;
-- 提交事务
-- COMMIT;
-- 回滚事务
ROLLBACK;

先使用SELECT语句来选取待更新的行,并在其后添加FOR UPDATE关键字,从而将该行数据进行锁定。然后再执行UPDATE语句来更新该行数据。最后通过COMMIT确认事务完成,从而释放锁定。

For Update的应用场景
数据库更新:当数据库中某些记录需要进行修改、删除或插入时,可以使用For Update锁定这些记录,以确保数据操作的正确性和一致性。
并发控制:在并发访问情况下,多个线程可能会同时读取和写入同一份数据,使用For Update可以避免并发问题,保证数据的完整性和准确性。
事务处理:在事务中,For Update可以确保对共享资源的互斥访问,防止出现数据不一致的情况。
缓存更新:使用For Update可以在缓存中更新数据,保证在多个进程或线程中操作缓存时的数据一致性。
悲观锁控制:For Update是一种悲观锁控制方法,可以确保在对共享资源进行操作前,先将其锁定,以防止其他线程对其修改。

开启FOR UPDATE后其他事务需要等待该事务释放锁才能对该记录进行操作。

当有多个事务同时访问同一条记录时,只有一个事务能够获得锁,其他事务需要等待。如果获得锁的事务没有及时释放锁,则其他事务可能会发生死锁现象


http://www.kler.cn/a/274453.html

相关文章:

  • [吾爱出品]CursorWorkshop V6.33 专业鼠标光标制作工具-简体中文汉化绿色版
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.29 NumPy+Scikit-learn(sklearn):机器学习基石揭秘
  • git进阶--6---git stash
  • java-(Oracle)-Oracle,plsqldev,Sql语法,Oracle函数
  • 大模型领域的Scaling Law的含义及作用
  • hypermesh中用tcl脚本生成多个线段
  • 串口123
  • 《算法王晓东》最小重量机器设计问题
  • JavaSE(上)-Day6
  • 基于openresty构建运维工具链实践
  • Elasticsearch常用语句
  • 系统架构设计师笔记第37期:数据访问层设计
  • 保姆级docker 容器安装部署 MySQL:5.7主从复制
  • 从零开始写 Docker(六)---实现 mydocker run -v 支持数据卷挂载
  • 搭建项目后台系统基础架构
  • 【MySQL】MySQL视图
  • c++ 递增的5位数
  • 15届蓝桥杯备赛(2)
  • 管道(acwing,蓝桥杯,二分)
  • P8717 [蓝桥杯 2020 省 AB2] 成绩分析 Python
  • 【洛谷 P9242】[蓝桥杯 2023 省 B] 接龙数列 题解(线性DP)
  • WRF模型运行教程(ububtu系统)--III.运行WRF模型(官网案例)
  • 我的尝试:Codigger + Vim
  • 迷宫问题(c++题解)
  • MQTT建立连接
  • 【C++】每日一题 219 最小栈