一次更新多个MySQL行


Updating Multiple MySQL Rows at Once

以下是场景:

当顾客第一次下订单时,桌子是空的;看起来像这个

+----+------+---------+
| no | item | results |
+----+------+---------+

下订单后,表格看起来像这个

+----+--------+---------+
| no | item   | results |
+----+--------+---------+
| 1  | Test 1 | null    |
| 2  | Test 2 | null    |
| 3  | Test 3 | null    |
+----+--------+---------+

这是容易的部分。我可以在INSERT查询中使用逗号分隔的VALUE子句。

然后订单被发送到实验室,当实验室人员完成工作时,表格变成这样:

+----+--------+---------+
| no | item   | results |
+----+--------+---------+
| 1  | Test 1 | Res 1   |
| 2  | Test 2 | Res 2   |
| 3  | Test 3 | Res 3   |
+----+--------+---------+

这就是你的答案。我需要用结果更新测试。然而,我真的不想做几十个UPDATE--SET--WHERE语句,每个测试项目一个。还有别的办法吗?

根据存储引擎的限制等,您可以在重复的上使用插入

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

这允许您使用插入查询,如果行已经存在,则该查询将更新值。

类似的东西

insert into table (no, item, result) values(1, "A", "B") on duplicate key update item=values(item), result=values(result)

还有REPLACE INTO

http://dev.mysql.com/doc/refman/5.0/en/replace.html

其中一个应该适合你的需要。

您可以创建另一个表并在其中创建INSERT值:

+----+---------+
| no | results |
+----+---------+
| 1  | Res 1   |
| 2  | Res 2   |
| 3  | Res 3   |
+----+---------+

然后只有一个更新:

UPDATE
    t1
SET
    results = t2.results
INNER JOIN
    t2
ON t1.no = t2.no
INSERT INTO ... ON DUPLICATE KEY UPDATE

表必须具有唯一键。它比单行更新更快。

不幸的是(据我所知(,您不能在一个SQL查询中执行多个唯一的更新。

您可以在一个查询中更新多个行,但每个行都会得到相同的更新。

每个更新都需要作为自己的声明来完成。

最好的办法是编写一个更新单行的循环,并让它为需要完成的每个更新运行。