mysql乐观和悲观锁实现_mysql实现乐观锁和悲观锁该怎么编写?

乐观锁和悲观锁相信大家都是知道的,这是java中的基础知识,今天我们就来看看它们两者该如何使用代码实现吧。

乐观锁实现

1)、表设计

表task,分别有三个字段id,value、version

2)、具体实现

-首先读取task表中的数据,得到version的值为versionValue

-在每次更新task表value字段时,因为要防止可能发生的冲突,我们需要这样操作select (value,version) from task where id=#{id}

update task

set value=newValue,version=versionValue+ 1

whereid=#{id} and version=versionValue;

只有当这条语句执行成功了,本次更新value字段的值才会表示成功

我们假设有两个节点A与B都需要更新task表中的value字段值,在相同时刻,A和B节点从task表中读到的version值都为2,那么A节点和B节点在更新value字段值的时候,都需要操作

update task set value = newValue,version = 3 where version = 2;

实际上其实只有1个节点执行该SQL语句成功,我们假设A节点执行成功,那么此时task表的version字段的值是3,B节点再操作update task

set value = newValue,version = 3 where version =

2;这条SQL语句是不执行的,这样就保证了更新task表时不发生冲突

悲观锁实现

数据库中悲观锁实现,通常都是依靠的数据库锁机制。悲观锁原理:当我们在查询出goods信息后就把当前的数据锁定,直到我们修改完毕后再解锁。那么在这个过程中,因为goods被锁定了,就不会出现有第三者来对其进行修改了。//使用悲观锁,我们必须要首先关闭mysql数据库的自动提交属性

set autocommit=0;

//设置完autocommit后,我们就可以执行我们的正常业务了。具体如下:

//1.开始事务

start transaction;

//2.查询出商品信息

select status from t_goods where id=1 for update;

//3.根据商品信息生成订单

insert into t_orders (id,goods_id) values (null,1);

//4.修改商品status为2

update t_goods set status=2;

//5.提交事务

commit;

以上就是今天的所有内容了,还想知道更多乐观锁与悲观锁等常见问题,就请持续关注本网站吧。

推荐阅读:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值