日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

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

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

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

以前在工作中遇到了學(xué)要編寫(xiě)數(shù)據(jù)同步的SQL語(yǔ)句,需求很簡(jiǎn)單就是同步兩個(gè)表的數(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

這段代碼單獨(dú)運(yùn)行不會(huì)有任何問(wèn)題,但在高并發(fā)下會(huì)出現(xiàn)主鍵沖突,甚至?xí)霈F(xiàn)死鎖。(因?yàn)檫@段代碼是典型的條件爭(zhēng)用,在兩個(gè)事務(wù)同時(shí)運(yùn)行時(shí)候,可能都會(huì)互相等待你要更新的那一行導(dǎo)致死鎖)

如何解決問(wèn)題呢?看下面的代碼,直接編寫(xiě)UPDATE語(yǔ)句如果 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用于防止語(yǔ)句級(jí)別的轉(zhuǎn)換死鎖(讓另一個(gè)會(huì)話(huà)等待,而不是鼓勵(lì)受害者重試)。

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

這段代碼在并發(fā)下不會(huì)出現(xiàn)問(wèn)題,但是因?yàn)樯厦鎯蓚€(gè)的關(guān)鍵字使用,會(huì)降低并發(fā)性能。

上述解決方案顯然是針對(duì)更新的情況很多的時(shí)候比較有效,但是如果大量數(shù)據(jù)都不存在,那么先執(zhí)行這個(gè)UPDATE語(yǔ)句就浪費(fèi)了很多必要的檢查。針對(duì)此情形下面是解決方案,先進(jìn)行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é)論

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

?

閱讀原文:原文鏈接


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

欧洲色一二三| 5欧美大香蕉在线观看| 中文在线字幕一区二区在线播放| 亚洲精品女同一区二区| 亚洲一区地址| 国产又粗又长又大又长| 一区二区三区国产在线| www.男女欧美日韩| 超碰97caopro观看| 欧美社区在线中午麻豆| 综合国产第一页激情| 欧美日韩国产亚洲另类精品操逼网站| 91探花色| 白浆国产精品一区| 黄频美女视频网站免费观看| 美女日大B视频免费看| 国产特级婬片| 福利在线成人| 久久丫精品| 图片专区 亚洲 欧美| 亚洲av一卡二卡三卡四卡不卡色色| !精品国产99久久久久久| 911视频一区| 欧美亚州曰本黄片一区二区| 老女人性久久| 国产亚洲欧美成人在线观看| 一区骚| 亚洲经典一区二区三| 毛片久久精品。| 哎呀国产的大鸡巴片子| www日本一区=区| 羞羞国产精品网站| 高清无码艹逼视频网址| 天天天日狠狠干| 舔B视频免费在线观看| 国产精品3P在线观看| 91手机国产热久综合一区| 黄色三级毛片| 国产后入美女老师在线| 欧美一级a一级a爱片奂费| av香蕉国产|