久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Mysql中怎么實(shí)現(xiàn)Update批量更新

共計(jì) 1634 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。

自動(dòng)寫(xiě)代碼機(jī)器人,免費(fèi)開(kāi)通

Mysql 中怎么實(shí)現(xiàn) Update 批量更新,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

通常情況下,我們會(huì)使用以下 SQL 語(yǔ)句來(lái)更新字段值:

UPDATE mytable SET myfield= value  WHERE other_field= other_value

但是,如果你想更新多行數(shù)據(jù),并且每行記錄的各字段值都是各不一樣,你會(huì)怎么辦呢?剛開(kāi)始你可能會(huì)想到使用循環(huán)執(zhí)行多條 UPDATE 語(yǔ)句的方式,就像以下的 python 程序示例:

for x in xrange(10):
 sql =   UPDATE mytable SET myfield= value  WHERE other_field= other_value  

這種方法并沒(méi)有什么任何錯(cuò)誤,并且代碼簡(jiǎn)單易懂,但是在循環(huán)語(yǔ)句中執(zhí)行了不止一次 SQL 查詢,在做系統(tǒng)優(yōu)化的時(shí)候,我們總是想盡可能的減少數(shù)據(jù)庫(kù)查詢的次數(shù),以減少資源占用,同時(shí)可以提高系統(tǒng)速度。幸運(yùn)的是,還有更好的解決方案,只不過(guò) SQL 語(yǔ)句稍微復(fù)雜點(diǎn),但是只需執(zhí)行一次查詢即可,語(yǔ)法如下:

UPDATE mytable
 SET myfield = CASE other_field
 WHEN 1 THEN  value 
 WHEN 2 THEN  value 
 WHEN 3 THEN  value 
 END
WHERE id IN (1,2,3)

這樣的 SQL 語(yǔ)句是很容易理解的,也就是用到了很多編程語(yǔ)言都有的關(guān)鍵字 CASE,根據(jù) id 字段值來(lái)進(jìn)行不同分支的當(dāng)型判斷,

如果你需要更新一行記錄的多個(gè)字段,可以用以下 SQL 語(yǔ)句:

UPDATE categories
 SET display_order = CASE id
 WHEN 1 THEN 3
 WHEN 2 THEN 4
 WHEN 3 THEN 5
 END,
 title = CASE id
 WHEN 1 THEN  New Title 1 
 WHEN 2 THEN  New Title 2 
 WHEN 3 THEN  New Title 3 
 END
WHERE id IN (1,2,3)

以上方案大大減少了數(shù)據(jù)庫(kù)的查詢操作次數(shù),大大節(jié)約了系統(tǒng)資源

不過(guò)這個(gè)有個(gè)缺點(diǎn):要注意的問(wèn)題是 SQL 語(yǔ)句的長(zhǎng)度,需要考慮程序運(yùn)行環(huán)境所支持的字符串長(zhǎng)度,當(dāng)然這也可以更新 mysql 的設(shè)置來(lái)擴(kuò)展。

當(dāng)然 python 這么強(qiáng)大的語(yǔ)言還給我們提供了 executemany 這么強(qiáng)大的方法,它不僅可以插入數(shù)據(jù) 當(dāng)然也可以用于更新數(shù)據(jù) 作為一個(gè)經(jīng)常搞事情的人 這些東西要經(jīng)常相互用下 才可以對(duì)比出結(jié)果

update_sql =   UPDATE mayi_order_image 
set order_city = %s
where user_ip = %s and dt = %s and id = %s 
 and user_ip is not null and (order_city is null or order_city =   )
  
pp = []
for x in xrange(len(result)):
 ip = result[x][0]
 id_ = result[x][1]
 add = dbip.lookup(str(ip))
 adds = add.split(\t)
 address = str(adds[0]) +  , +str(adds[1] )+  , + str(adds[2])
 pp.append((address,ip,end,id_))
 if x%5000 == 0:
 saveLog_many(update_sql,pp)
 pp = []
saveLog_many(update_sql,pp)

看完上述內(nèi)容,你們掌握 Mysql 中怎么實(shí)現(xiàn) Update 批量更新的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝各位的閱讀!

向 AI 問(wèn)一下細(xì)節(jié)

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計(jì)1634字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 黄冈市| 宜城市| 隆德县| 凤山市| 犍为县| 镇宁| 榆社县| 广西| 神木县| 崇阳县| 读书| 江安县| 怀宁县| 台东县| 永康市| 中西区| 贵溪市| 昂仁县| 宝清县| 蓬安县| 镇雄县| 启东市| 织金县| 务川| 定襄县| 锡林郭勒盟| 孟村| 娄烦县| 舒兰市| 凤阳县| 阜宁县| 冀州市| 文安县| 遵义市| 丁青县| 遂平县| 怀安县| 梓潼县| 金寨县| 九龙县| 泰和县|