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