tidb的乐观锁功能bug

之前曾经用过springboot自带的乐观锁功能,就是在实体类中增加一个版本号字段,加上@Version注解。当时测试的时候是可以的,当实体类版本不对的时候,调用save方法就会抛出ObjectOptimisticLockingFailureException异常。但是后面我想加一个切面实现重试机制的时候发现突然行不通了,在tidb的环境下,会执行update set......where id = ? and version=?语句,却不抛出异常,如果这样的话乐观锁就完全没有用了。

当时花了我好长时间去寻找原因,后来发现当我去掉事务注解的时候tidb也能抛出异常,就是说是事务影响了tidb的乐观锁机制,然后我在网上寻找资料发现了这个

TiDB和Mysql的sql差异总结

我认为就是这个的原因,tidb在事务中不加锁,在提交时才加锁。但是代码中是不可能不用事务的,那么tidb环境下就不能实现springboot的乐观锁了,只能自己实现。。。。。。

tidb的坑真的很多,之前还碰到过先排序再分组语句失效的事情,和mysql不同,即使你在子查询中用了limit,子查询中的排序也不会生效,我不得不因此用更复杂的语句去实现这个功能。如果你把它当做mysql来使用那你就完蛋了,对于任何不确定的语句都要在tidb的环境中尝试一遍才行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值