有没有更有效的方法来运行多个 UPDATE sql 语句

Mal*_*bur 2 mysql performance sql-update

当谈到 sql 查询时,我有点菜鸟,而且我只真正使用过基本的 SELECT、UPDATE、DELETE 语句。现在我需要更新一个垂直表中的很多行(50+),并且我正在运行这样的语句:

UPDATE `postmeta` SET meta_value = 'John' WHERE `meta_key` = 'name' AND `post_id` = 29230;
UPDATE `postmeta` SET meta_value = 'Johnson' WHERE `meta_key` = 'last_name' AND `post_id` = 29230;
UPDATE `postmeta` SET meta_value = 'www.johnsonsdiner.com' WHERE `meta_key` = 'url' AND `post_id` = 29230;
UPDATE `postmeta` SET meta_value = 'john@johnson.com' WHERE `meta_key` = 'mail' AND `post_id` = 29230;
UPDATE `postmeta` SET meta_value = '12341234' WHERE `meta_key` = 'phone' AND `post_id` = 29230;
... + 45 more
Run Code Online (Sandbox Code Playgroud)

注意 post_id 是相同的,而 meta_key 不同。

有没有更好的方法来运行所有这些更新,这会为 mySQL 带来更好的性能?为每个语句添加一个 LIMIT 1 会有所不同吗?

任何帮助表示赞赏

Nul*_*ull 5

您只能使用一个update带有非case共同条件的语句,也可以将共同条件带到 where 子句中:

UPDATE `postmeta`
        SET meta_value = case
             when `meta_key` = 'name' then 'John'
             when `meta_key` = 'last_name' then 'Johnson'
             when `meta_key` = 'url' then 'www.johnsonsdiner.com'
             when `meta_key` = 'mail' then 'john@johnson.com'
             when `meta_key` = 'phone' then '12341234' 
             .
             ...45 more
             .
             end
where `post_id` = 29230;
Run Code Online (Sandbox Code Playgroud)