共計(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é)