mysql - 单个数据库查询中的多个 sql 更新

标签 mysql sql performance

在Mysql中是否可以将这个查询变成1个查询?

UPDATE users SET users.title =1 WHERE  users.oldId =  'adab01' LIMIT 1 ; 
UPDATE users SET users.title =2 WHERE  users.oldId =  'agok01' LIMIT 1 ; 
UPDATE users SET users.title =1 WHERE  users.oldId =  'alla01' LIMIT 1 ; 
UPDATE users SET users.title =2 WHERE  users.oldId =  'allm01' LIMIT 1 ;

与 SELECT 中类似的内容:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")

这在 MySql 中可行吗?

只是为了让你知道我想做什么:

我正在阅读这篇文章,跳转到(避免在循环内执行 SQL 查询)

http://code.google.com/speed/articles/optimizing-php.html

最佳答案

您需要使用 CASE 语句来执行此操作,但它不会非常漂亮:

UPDATE USER SET USER.title = (CASE USER.oldId
                              WHEN 'adab01' THEN 1
                              WHEN 'agok01' THEN 2
                              WHEN 'alla01' THEN 1
                              WHEN 'allm01' THEN 2 
                              ELSE USER.oldID end)
WHERE USER.oldId in
(
    'adab01',
    'agok01',
    'alla01',
    'allm01'
)

请注意,WHERE 是可选的,因为没有它,数据不应该被不必要地更改,但它也会“触及”表中的每一行,而不是仅那些需要更新的。

关于mysql - 单个数据库查询中的多个 sql 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029846/

相关文章:

mysql - Eloquent 中的 orWhere 具有多个条件

performance - Flash 如何处理我的匿名函数?

jquery - 使用 Jquery ajax 填充 select 的最*有效*方法

mysql - MYSQL复制是实时的吗?

mysql - 主机 'xxx.xx.xxx.xxx' 不允许连接到此 MySQL 服务器

sql - 创建触发器数据的临时表

mysql - 从数据库中获取每个类别的一个结果

php - 构造SQL语句时插值(使用{}波浪括号)和拼接(.,或点)的区别

C 程序运行异常缓慢

连接到 MySQL Linux 数据库的 C# 问题