go mysql 加锁_【MySQL】中的乐观锁与悲观锁-Go语言中文社区

在并发环境中,防止数据不一致通常使用乐观锁和悲观锁。乐观锁通过版本号机制确保更新时数据未被修改,而悲观锁则在操作开始时锁定数据,保证数据独占。Go语言中,乐观锁可通过更新时对比版本号实现,悲观锁则依赖于数据库的`for update`语句来保证数据一致性。
摘要由CSDN通过智能技术生成

为什么需要锁

在并发环境下,如果多个客户端访问同一条数据,此时就会产生数据不一致的问题,如何解决,通过加锁的机制,常见的有两种锁,乐观锁和悲观锁,可以在一定程度上解决并发访问。

乐观锁

乐观锁,顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,"乐观"的认为加锁一定会成功的,在最后一步更新数据的时候在进行加锁,乐观锁的实现方式一般为每一条数据加一个版本号,具体流程是这样的:

1)、创建一张表时添加一个version字段,表示是版本号,如下:

iad36tzcl7.jpeg

2)、修改数据的时候首先把这条数据的版本号查出来,update时判断这个版本号是否和数据库里的一致,如果一致则表明这条数据没有被其他用户修改,若不一致则表明这条数据在操作期间被其他客户修改过,此时需要在代码中抛异常或者回滚等。伪代码如下:

updatetbsetname='yyy'andversion=version+1whereid=1andversion=version;

1. SELECT name AS old_name, version AS old_version FROM tb where ...;

2. 根据获取的数据进行业务操作,得到new_dname和new_version

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值