我需要更新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...;
答案 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;