如何用一个查询批量更新mysql数据?

Wei*_*eat 37 php mysql

$query = mysql_query("UPDATE a SET fruit = '**apple**' WHERE id = '**1**' ");
$query2 = mysql_query("UPDATE a SET fruit = '**orange**' WHERE id = '**2**' ");
$query3 = mysql_query("UPDATE a SET fruit = '**peach**' WHERE id = '**3**' ");
Run Code Online (Sandbox Code Playgroud)

有没有办法将其简化为一个查询?

Yar*_*lav 58

我找到了以下解决方案:

INSERT into `table` (id,fruit)
    VALUES (1,'apple'), (2,'orange'), (3,'peach')
    ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);
Run Code Online (Sandbox Code Playgroud)

Id必须是唯一或主键.但不了解表现.

  • 某些用例的理想解决方案,但是如果`table`有一个没有默认值的必需列`b`,即使正在更新的记录已经定义了这个值,这也行不通.仅更新现有记录的某些部分需要采用不同的方法. (4认同)
  • 应该知道,这种方式auto_increment仍然会增加每个不成功的插入语句尝试 (4认同)

Ome*_*esh 52

是的,您可以使用此查询执行此操作:

UPDATE a 
SET fruit = (CASE id WHEN 1 THEN 'apple'
                     WHEN 2 THEN 'orange'
                     WHEN 3 THEN 'peach'
             END)
WHERE id IN(1,2 ,3);
Run Code Online (Sandbox Code Playgroud)

  • 我只想提一下CASE语句将测试每个案例直到满足条件的观察结果.当id为3时,将在真实之前测试1和2.仅仅因为这个原因,我选择@ Yaroslav的方法,其中重复键的条件设置值而不应用其他条件. (5认同)