mysql 并发 加锁_MySQL如何加锁控制并发

本文详细介绍了MySQL中并发控制的两种主要方法:乐观锁和悲观锁。通过实例展示了如何使用版本号实现乐观锁,以及如何利用读锁(LOCK IN SHARE MODE)和写锁(FOR UPDATE)进行行级锁定。文章通过具体操作演示了不同锁在并发场景下的行为,帮助读者理解这两种锁的工作机制。
摘要由CSDN通过智能技术生成

目录

前言一、乐观锁

添加version字段二、悲观锁

读锁

全表锁(LOCK TABLE 表 READ)行锁(SELECT ... LOCK IN SHARE MODE)写锁

全表锁(LOCK TABLE 表 WRITE)行锁(SELECT ... FOR UPDATE)

前言

锁总体可以分为乐观锁和悲观锁,简单说,乐观锁用版本号控制,悲观锁用锁控制。

下面是待会要用来测试的数据

# 添加一个user表CREATE TABLE `users` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',  `name` varchar(255) NOT NULL COMMENT '姓名',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;# 插入3条数据INSERT INTO `users` (`id`, `name`)VALUES (1, '雪山飞猪'), (2, 'chenqionghe'), (3, 'cqh');

查询结果如下:

a3318c941136e31422f9e0be7c9e8802.gif

MySQL如何加锁控制并发-1.jpg (23.37 KB, 下载次数: 0)

2021-2-18 11:08 上传

一、乐观锁

核心原理是增加一个version的字段来控制。

举个场景,我们希望并发更新单行记录的时候的时候,只有一个进程更新成功,如下

UPDATE users SET name="雪山飞猪" WHERE id=3UPDATE users SET name="chenqionghe" WHERE id=3

上面这两个sql最终都会更新成功,且以最后更新结果为主。

解决办法是添加一个version字段

添加version字段

ALTER TABLE users ADD `version` INT NOT NULL DEFAULT '0'

解决办法是添加一个version字段,每个更新时where条件都加上它,并且也更新它

UPDATE users SET name="雪山飞猪",version=version+1 WHERE id=3 AND version=0UPDATE users S

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值