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的環境中嘗試一遍才行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章