数据库乐观锁如何实现幂等性?
數(shù)據(jù)庫(kù)樂觀鎖方案一般只能適用于執(zhí)行更新操作的過程,我們可以提前在對(duì)應(yīng)的數(shù)據(jù)表中多添加一個(gè)字段,充當(dāng)當(dāng)前數(shù)據(jù)的版本標(biāo)識(shí)。
這樣每次對(duì)該數(shù)據(jù)庫(kù)該表的這條數(shù)據(jù)執(zhí)行更新時(shí),都會(huì)將該版本標(biāo)識(shí)作為一個(gè)條件,值為上次待更新數(shù)據(jù)中的版本標(biāo)識(shí)的值。
適用操作
更新操作
使用限制
- 需要數(shù)據(jù)庫(kù)對(duì)應(yīng)業(yè)務(wù)表中添加額外字段
為了每次執(zhí)行更新時(shí)防止重復(fù)更新,確定更新的一定是要更新的內(nèi)容,我們通常都會(huì)添加一個(gè)?version?字段記錄當(dāng)前的記錄版本,這樣在更新時(shí)候?qū)⒃撝祹?#xff0c;那么只要執(zhí)行更新操作就能確定一定更新的是某個(gè)對(duì)應(yīng)版本下的信息。
這樣每次執(zhí)行更新時(shí)候,都要指定要更新的版本號(hào),如下操作就能準(zhǔn)確更新?version=5?的信息:
UPDATE my_table SET price=price+50,version=version+1 WHERE id=1 AND version=5上面 WHERE 后面跟著條件 id=1 AND version=5 被執(zhí)行后,id=1 的 version 被更新為 6,所以如果重復(fù)執(zhí)行該條 SQL 語(yǔ)句將不生效,因?yàn)?id=1 AND version=5 的數(shù)據(jù)已經(jīng)不存在,這樣就能保住更新的冪等,多次更新對(duì)結(jié)果不會(huì)產(chǎn)生影響。
?
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的数据库乐观锁如何实现幂等性?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库唯一主键如何实现幂等性?
- 下一篇: 分布式ID-数据库自增ID