如何使用单个查询批量更新MySQL数据?


您可以使用CASE语句在一个查询中批量更新MySQL数据。语法如下:

update yourTableName
set yourUpdateColumnName = ( Case yourConditionColumnName WHEN Value1 THEN ‘’UpdatedValue’
WHEN Value2 THEN ‘UpdatedValue’
.
.
N
END)
where yourConditionColumnName IN(Value1,Value2,.....N);

为了理解上述概念,让我们创建一个表。创建表的查询如下:

mysql> create table UpdateAllDemo
   −> (
   −> BookId int,
   −> BookName varchar(200)
   −> );
Query OK, 0 rows affected (1.18 sec)

使用insert命令在表中插入一些记录。插入记录的查询如下:

mysql> insert into UpdateAllDemo values(1000,'Introduction to C');
Query OK, 1 row affected (0.15 sec)
mysql> insert into UpdateAllDemo values(1001,'Introduction to Java');
Query OK, 1 row affected (0.21 sec)

使用select语句显示表中的所有记录。查询如下:

mysql> select *from UpdateAllDemo;

输出如下:

+--------+----------------------+
| BookId | BookName             |
+--------+----------------------+
| 1000   | Introduction to C    |
| 1001   | Introduction to Java |
+--------+----------------------+
2 rows in set (0.00 sec)

现在,我们将进行批量更新,即更新

  • 值“Introduction to C”为“C in Depth”,以及

  • 值“Introduction to Java”为“Java in Depth”。

您可以像上面显示的那样使用CASE语句来实现此操作。查询如下:

mysql> update UpdateAllDemo
   −> set BookName = (CASE BookId WHEN 1000 THEN 'C in Depth'
   −> when 1001 THEN 'Java in Depth'
   −> END)
   −> Where BookId IN(1000,1001);
Query OK, 2 rows affected (0.24 sec)

现在您可以使用select语句检查表中的值是否已更新。

检查表中已更新值的查询如下:

mysql> select *from UpdateAllDemo;

以下是显示批量更新成功的输出:

+--------+---------------+
| BookId | BookName      |
+--------+---------------+
| 1000   | C in Depth    |
| 1001   | Java in Depth |
+--------+---------------+
2 rows in set (0.00 sec)

更新于:2019年7月30日

6K+ 浏览量

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.