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