在mysql数据库中,我想更新多条数据,而这多条数据的更新条件又不一样,举例来说:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在mysql数据库中,我想更新多条数据,而这多条数据的更新条件又不一样,举例来说:相关的知识,希望对你有一定的参考价值。

举例来说:表book(id,name,maxindex)我想更新表open(id,name,index)中的name字段,条件是book.id=open.id and book.maxindex=open.index 满足条件时更新open.name=book.name.紧急求助!!!

参考技术A update open,book set open.name=book.name
where book.id=open.id and book.maxindex=open.index
参考技术B update open,book set open.name=book.name
where book.id=open.id and book.maxindex=open.index

mysql 批量更新多条记录(且不同值)的实现方法

mysql更新语句很简单,更新多条数据的某个字段为相同值,一般这样写:
UPDATE table_name SET field = ‘value‘ WHERE condition;
更新多条数据为不同值,你可以:
foreach ($display_order as $id => $ordinal) { 
    $sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id"; 
    mysql_query($sql); 
}
这样一条条进行,虽然性能差,还容易阻塞。
你也可以用一些SQL的小技巧:
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);

然而这样在记录量很大的情况下仍然性能很差,然后我们考虑使用:

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,如果更新的字段不全会将缺失的字段置为缺省值;INSERT INTO 则是只更新重复记录,不会改变其它字段。

如果这样性能仍显不足,我们还可以通过创建临时表来再次提速:
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;

创建临时表,更新临时表,从临时表更新。

以上是关于在mysql数据库中,我想更新多条数据,而这多条数据的更新条件又不一样,举例来说:的主要内容,如果未能解决你的问题,请参考以下文章

使用mysql在单个查询中更新多条记录

MySQL 性能优化的最佳20多条经验分享

如果 mysql 数据库中的表中不存在,则更新或插入多条记录

mysql 联表查询主表一条数据从表多条数据查询显示重复从表条数数据问题

mysql 批量更新多条记录(且不同值)的实现方法

mysql 查询出多条数据并更新其中一个字段值,不让更新怎么办