MySQL中的多个更新

时间:2020-03-05 18:38:01  来源:igfitidea点击:

我知道我们可以一次插入多行,有没有办法在MySQL中一次更新多行(就像在一个查询中一样)?

编辑:
例如我有以下

Name   id  Col1  Col2
Row1   1    6     1
Row2   2    2     3
Row3   3    9     5
Row4   4    16    8

我想将以下所有更新合并到一个查询中

UPDATE table SET Col1 = 1 WHERE id = 1;
UPDATE table SET Col1 = 2 WHERE id = 2;
UPDATE table SET Col2 = 3 WHERE id = 3;
UPDATE table SET Col1 = 10 WHERE id = 4;
UPDATE table SET Col2 = 12 WHERE id = 4;

解决方案

回答

UPDATE table1, table2 SET table1.col1='value', table2.col1='value' WHERE table1.col3='567' AND table2.col6='567'

这应该为我们工作。

MySQL手册中有多个表的参考。

回答

以下将更新一个表中的所有行

Update Table Set
Column1 = 'New Value'

下一个将更新Column2的值大于5的所有行

Update Table Set
Column1 = 'New Value'
Where
Column2 > 5

Unkwntech提供了所有更新多个表的示例

UPDATE table1, table2 SET
table1.col1 = 'value',
table2.col1 = 'value'
WHERE
table1.col3 = '567'
AND table2.col6='567'

回答

我们可能也有兴趣在更新上使用联接,这也是可能的。

Update someTable Set someValue = 4 From someTable s Inner Join anotherTable a on s.id = a.id Where a.id = 4
-- Only updates someValue in someTable who has a foreign key on anotherTable with a value of 4.

编辑:如果我们要更新的值不是来自数据库中的其他位置,则需要发出多个更新查询。

回答

UPDATE tableName SET col1='000' WHERE id='3' OR id='5'

这应该可以实现我们想要的。只需添加更多ID。我已经测试过了

回答

是的,我们可以使用INSERT ... ON DUPLICATE KEY UPDATE。

使用示例:

INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12)
ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2);

回答

由于我们具有动态值,因此需要对要更新的列使用IF或者CASE。它有点难看,但它应该可以工作。

使用示例,我们可以这样做:

UPDATE table SET Col1 = CASE id 
                          WHEN 1 THEN 1 
                          WHEN 2 THEN 2 
                          WHEN 4 THEN 10 
                          ELSE Col1 
                        END, 
                 Col2 = CASE id 
                          WHEN 3 THEN 3 
                          WHEN 4 THEN 12 
                          ELSE Col2 
                        END
             WHERE id IN (1, 2, 3, 4);