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);