濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Mysql Update批量更新的幾種方式

Mysql Update批量更新的幾種方式

熱門(mén)標(biāo)簽:南昌高頻外呼系統(tǒng)哪家公司做的好 百度地圖標(biāo)注后不顯示 俄國(guó)地圖標(biāo)注app 昆明電信400電話(huà)辦理 電銷(xiāo)機(jī)器人各個(gè)細(xì)節(jié)介紹 電銷(xiāo)機(jī)器人 行業(yè) 淄博400電話(huà)申請(qǐng) 溫州瑞安400電話(huà)怎么申請(qǐng) 電話(huà)機(jī)器人市場(chǎng)趨勢(shì)

通常情況下,我們會(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查詢(xún),在做系統(tǒng)優(yōu)化的時(shí)候,我們總是想盡可能的減少數(shù)據(jù)庫(kù)查詢(xún)的次數(shù),以減少資源占用,同時(shí)可以提高系統(tǒng)速度。幸運(yùn)的是,還有更好的解決方案,只不過(guò)SQL語(yǔ)句稍微復(fù)雜點(diǎn),但是只需執(zhí)行一次查詢(xún)即可,語(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ù)的查詢(xún)操作次數(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)

是不是這個(gè)更方便一些 但是嗎 速度 問(wèn)題 我感覺(jué)可以和第二種結(jié)合一下對(duì)比一下會(huì)更好呢

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

您可能感興趣的文章:
  • MySQL UPDATE更新語(yǔ)句精解
  • Mysql聯(lián)表update數(shù)據(jù)的示例詳解
  • 實(shí)例驗(yàn)證MySQL|update字段為相同的值是否會(huì)記錄binlog
  • mysql update語(yǔ)句的執(zhí)行過(guò)程詳解
  • MySQL select、insert、update批量操作語(yǔ)句代碼實(shí)例
  • Mysql update多表聯(lián)合更新的方法小結(jié)
  • MySQL執(zhí)行update語(yǔ)句和原數(shù)據(jù)相同會(huì)再次執(zhí)行嗎
  • mysql事務(wù)select for update及數(shù)據(jù)的一致性處理講解
  • MySQL中參數(shù)sql_safe_updates在生產(chǎn)環(huán)境的使用詳解
  • MYSQL updatexml()函數(shù)報(bào)錯(cuò)注入解析
  • mysql中錯(cuò)誤:1093-You can’t specify target table for update in FROM clause的解決方法
  • mybatis執(zhí)行批量更新batch update 的方法(oracle,mysql兩種)
  • 記一次MySQL更新語(yǔ)句update的踩坑

標(biāo)簽:拉薩 洛陽(yáng) 葫蘆島 嘉峪關(guān) 甘南 吐魯番 安徽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mysql Update批量更新的幾種方式》,本文關(guān)鍵詞  Mysql,Update,批量,更,新的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Mysql Update批量更新的幾種方式》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Mysql Update批量更新的幾種方式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    贵南县| 那坡县| 静乐县| 竹溪县| 宜君县| 昭觉县| 南溪县| 河南省| 祁门县| 通道| 自贡市| 象山县| 龙门县| 吉林省| 云和县| 来凤县| 大埔区| 马鞍山市| 南皮县| 胶州市| 阜康市| 扶余县| 永济市| 喀什市| 杂多县| 景东| 南充市| 丰县| 台中市| 伊宁市| 巩义市| 黄大仙区| 武功县| 封开县| 正阳县| 江山市| 新竹县| 武义县| 米泉市| 水城县| 丁青县|