多行更新为单个查询

时间:2018-08-19 14:14:24

标签: mysql sql sql-update

我需要更新3000多个行,但是如果我运行3000多个更新查询,它将变得太慢。

(这是我要更新的表)

items (
    id INT(11) NOT NULL,
    name VARCHAR(255) NOT NULL,
    members_only TINYINT(1) NOT NULL,
    price INT(11) NOT NULL,
    PRIMARY KEY (id)
);

所以我在考虑是否有办法像这样一次更新多行(因为如果以某种方式将它们全部合并,它应该运行得更快)。

UPDATE items SET name='name1', members_only=1, price=20 WHERE id=1 AND 
SET name='name2', members_only=0, price=70 WHERE id=2 AND 
SET name='name3', members_only=0, price=40 WHERE id=3...;

3 个答案:

答案 0 :(得分:3)

您可以使用CASE语句更新多行


*

答案 1 :(得分:2)

我建议使用join

UPDATE items i JOIN
       (SELECT 1 as id, 'name1' as name, 1 as members_only, 20 as price UNION ALL
        . . .
       ) newdata
       USING (id)
    SET i.name = newdata.name2,
        i.members_only = newdata.members_only,
        i.price = newdata.price;

或者,对同一事务中的每个id运行单独的更新,以便它们都同时生效。

答案 2 :(得分:0)

通过使用事务,也许它可以运行得更快。像这样:

Begin Transactions;
update ...
update ...
...
update ...
//Each of normal update SQL statment
Commit Transactions;