MySQL 的 INSERT
语句允许同时插入多行数据。但是,能否用单个查询更新多行呢?
是的,可以使用 INSERT ... ON DUPLICATE KEY UPDATE
语句一次性更新多行。当插入一行到表中,并且主键或唯一键已存在时,会发生以下情况:
INSERT
语句包含 DUPLICATE KEY UPDATE
子句,则使用更新子句中提供的值更新现有行。INSERT
语句不包含 DUPLICATE KEY UPDATE
子句,则会生成错误。考虑以下表格:
Name | id | Col1 | Col2 |
---|---|---|---|
Row1 | 1 | 6 | 1 |
Row2 | 2 | 2 | 3 |
Row3 | 3 | 9 | 5 |
Row4 | 4 | 16 | 8 |
我们希望将以下更新合并到单个查询中:
<code class="language-sql">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;</code>
使用 INSERT ... ON DUPLICATE KEY UPDATE
的相应批量更新查询如下:
<code class="language-sql">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);</code>
此查询会在新行不存在时插入新行,或者在主键已存在于表中时更新现有行。
以上是MySQL 可以在单个查询中更新多行吗?的详细内容。更多信息请关注PHP中文网其他相关文章!