CrispDev
<< Back
MySQL 更新多条记录的不同值

MySQL语句使用过程中,会用到一些多行更新的场景。比较常见的是,把多行都更新成同一个值。如:

UPDATE table_name  
SET column_value=1  
WHERE column_id IN (1,2,3);

如果更新多行数据,且值是不同的,往往会使用for循环进行更新。如:

foreach ($data_list as $item) {  
    $sql = "UPDATE table_name SET column={$item['value']} WHERE column={$item['id']}";  
    $ret = mysql_query($sql);  
    if ($ret === false) {  
        //...
    }  
}  

这样写网络交互次数比较多,可能会导致性能问题,看起来也不优雅。 那能否一条SQL搞定呢?答案是肯定的。

UPDATE table_name  
SET column_value = CASE column_id  
    WHEN 1 THEN 0  
    WHEN 2 THEN 1  
    WHEN 3 THEN 2  
WHERE column_id IN(1,2,3);

同理,也可以使用此方法设置多行多个值。

UPDATE table_name  
SET column_value = CASE column_id  
    WHEN 1 THEN 0  
    WHEN 2 THEN 1  
    WHEN 3 THEN 2,  
SET column_desc = CASE column_id  
    WHEN 1 THEN 'test 1'
    WHEN 2 THEN 'test 2'
    WHEN 3 THEN 'test 3'
WHERE column_id IN(1,2,3);

END.