公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

請不要編寫“如果存在則更新否則執(zhí)行插入”的SQL代碼

admin
2025年3月23日 23:21 本文熱度 409

以前在工作中遇到了學要編寫數(shù)據(jù)同步的SQL語句,需求很簡單就是同步兩個表的數(shù)據(jù),例如:某條記錄存在則更新(UPDATE),否則插入(INSERT)。下面的SQL代碼似乎看上去非常合理。(我曾經(jīng)也是這么做的)

IF EXISTS (SELECT 1 FROM dbo.t WHERE [key] = @key)BEGIN  UPDATE dbo.t SET val = @val WHERE [key] = @key;ENDELSEBEGIN  INSERT dbo.t([key], val) VALUES(@key@val); END

這段代碼單獨運行不會有任何問題,但在高并發(fā)下會出現(xiàn)主鍵沖突,甚至會出現(xiàn)死鎖。(因為這段代碼是典型的條件爭用,在兩個事務同時運行時候,可能都會互相等待你要更新的那一行導致死鎖)

如何解決問題呢?看下面的代碼,直接編寫UPDATE語句如果 Key存在則直接更新,如果@@ROWCOUNT影響的行數(shù)為0則代表記錄不存在,那么執(zhí)行INSERT操作。

BEGIN TRANSACTION;
UPDATE dbo.t WITH (UPDLOCK, SERIALIZABLE) SET val = @val WHERE [key] = @key;
IF @@ROWCOUNT = 0BEGIN  INSERT dbo.t([key], val) VALUES(@key@val);END

  • UPDLOCK用于防止語句級別的轉(zhuǎn)換死鎖(讓另一個會話等待,而不是鼓勵受害者重試)。

  • SERIALIZABLE用于防止整個事務中對基礎(chǔ)數(shù)據(jù)的更改(確保不存在的行繼續(xù)不存在)。

這段代碼在并發(fā)下不會出現(xiàn)問題,但是因為上面兩個的關(guān)鍵字使用,會降低并發(fā)性能。

上述解決方案顯然是針對更新的情況很多的時候比較有效,但是如果大量數(shù)據(jù)都不存在,那么先執(zhí)行這個UPDATE語句就浪費了很多必要的檢查。針對此情形下面是解決方案,先進行INSERT的條件檢查,如果Key不存在則執(zhí)行INSERT操作,否則執(zhí)行UPDATE。

BEGIN TRANSACTION;
INSERT dbo.t([key], val)   SELECT @key@val  WHERE NOT EXISTS  (    SELECT 1 FROM dbo.t WITH (UPDLOCK, SERIALIZABLE)      WHERE [key] = @key  );
IF @@ROWCOUNT = 0BEGIN  UPDATE dbo.t SET val = @val WHERE [key] = @key;END
COMMIT TRANSACTION;

結(jié)論

盡量使用文中的改進方法,如果更新頻繁的則先進行UPDATE判斷,否則執(zhí)行INSERT判斷。這些代碼雖然會限制并發(fā)程度,但100%不會產(chǎn)生死鎖。

?

閱讀原文:原文鏈接


該文章在 2025/3/24 17:04:33 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關(guān)報表等業(yè)務管理,結(jié)合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 精品视频在线视频观看 | 国产一区二区三区四区五区 | 苍井空一区二区在线播放 | 国产日韩精品一区二区三区在线观 | 爆乳在线观看无码av | 国产精品乱码99久久久久久午 | 91av视频在线观看 | 精品视频在线观看一区二区 | 国产精品欧美亚洲韩国日本不卡 | 成人主播在线观看 | 国产在线观看91精品一区 | 91欧美视频在线播放 | 国产一区二区三区亚洲精选 | 国产丝袜美 | 国产三级国产精品国产国在线观看 | 精品国内自产拍在线视频 | 国产午夜福利精品一区二区三区 | 国产精品无码高清在线观看 | 99久久精品无码一 | 69天堂人成无码麻豆免费视频 | 国产精品偷伦视频免费观看了 | 91桃色视频| 国产一区二区寻花 | 国产丝袜在线观 | 国产精品大片大片看大 | 国产成人www免费人 国产成人www免费人成看片 | 国产午夜a理论毛片在线影院 | av秋霞电影在线播放网站 | 丰满白嫩尤物一区二区 | 爆爽久久久一区二区又大又黄又嫩 | 国产精品成人久久 | 国产精品毛片99久久久久 | 东京热无码人妻中文 | 国产a级精品一级毛片 | 精品人妻av中文字幕乱码 | 成人无码精品1区2区3区免费 | 国产成人99电影 | 果冻传媒一区二区天美传媒 | 国产高清在线a视频大全首页 | 国产经典三级在线播放 | 爆乳亚洲一区二区 |