MySQL丢失更新的解决方案_丢失更新的解决方案(乐观锁+悲观锁)

丢失更新: 当两个事物或多个事务都更新了同一条数据,但是这些事务彼此之间都不知道其他事务进行的修改,因此第二个更改覆盖了第一次的更改,说白了,就是事务A还没有提交之后,但是这个时候事务B更新了数据,那么事务A就丢失更新了。

解决方案: 乐观锁+悲观锁

悲观锁: 数据库的一种锁机制,悲观锁分成两种,分别是共享锁和排它锁

添加共享锁方式:select * from account lock in share mode ;

添加排它锁方式:select * from account for update;

下面说一下共享锁: 共享锁就是,例如 我在客户端A 给数据C 添加了共享锁,此时我在客户端B只能添加共享锁进行查看,没有修改的权利,如果我想要在客户端B进行修改,我只能在A处commit才能进行修改。

下面说一下排它锁:排它锁就是我在客户端A 给数据C添加了排它锁,那么我在客户端B只能在客户端 A commit之后,才能select数据,换句话说,只要我在客户端B用锁进行了查询,那我我都需要等待Acommit之后,如果此时我客户端B不加锁,我是可以查询到的。这个排它锁很像数据库隔离级别中的最高的隔离级别。但是排它锁是锁住了一条数据,而排它锁是锁上了这条数据。

说完了悲观锁,那么我们在说说乐观锁。

乐观锁:就是假设丢失更新不存在,它使用的是数据库的字段进行加测。 例如我在我的字段中添加一个字段,字段的类型是 timestamp 在插入和修改时 都会自动更新为当前时间 ,我根据我的sql条件进行判断,如果我的时间不符合,那么我的跟新失败。

5075448b1d669d16f3dfee65fa1cca5e.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值