mysql 批量更新多條記錄(且不一樣值)的實現方法

mysql更新語句很簡單,更新多條數據的某個字段爲相同值,通常這樣寫: php

UPDATE table_name SET field = 'value' WHERE condition; mysql

更新多條數據爲不一樣值,你能夠:  sql

foreach ($display_order as $id => $ordinal) { 
    $sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id"; 
    mysql_query($sql); 
}

這樣一條條進行,雖然性能差,還容易阻塞。 性能

你也能夠用一些SQL的小技巧: spa

UPDATE table_name 
    SET field = CASE id 
        WHEN 1 THEN 'value'
        WHEN 2 THEN 'value'
        WHEN 3 THEN 'value'
    END
WHERE id IN (1,2,3);

然而這樣在記錄量很大的狀況下仍然性能不好,而後咱們考慮使用: code

REPLACE INTO table_name (id,data) VALUES (1,'2'),(2,'3'),...(x,'y');
INSERT INTO table_name (id,data) VALUES (1,'2'),(2,'3'),...(x,'y') ON DUPLICATE KEY UPDATE data=VALUES(data);

REPLACE INTO 操做本質是對重複的記錄先 DELETE 後 INSERT,若是更新的字段不全會將缺失的字段置爲缺省值; it

INSERT INTO 則是隻更新重複記錄,不會改變其它字段。 io

若是這樣性能仍顯不足,咱們還能夠經過建立臨時表來再次提速: table

create temporary table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values  (0,'gone'), (1,'xx'),...(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;

建立臨時表,更新臨時表,從臨時表更新。 class

相關文章
相關標籤/搜索