如何一次更新2个语句?

时间:2009-10-15 03:48:08

标签: sql mysql

update accounts set type=1 where id=2;

update accounts set type=3 where id=4;

6 个答案:

答案 0 :(得分:3)

同时?如果您的意思是在查询完成之前要确保没有其他查询影响该表,那么您将希望将它们包装在事务中。

答案 1 :(得分:2)

你问的确切是

update accounts set type = case id when 2 then 1 else 3 end where id in (2,4)

但总的来说,这当然是不可能的。

答案 2 :(得分:1)

此:

UPDATE ACCOUNTS t SET t.type = 1 WHERE t.id = 2; UPDATE ACCOUNTS t SET t.type = 3 WHERE t.id = 4;

...是可接受的SQL语句语法 - “;”是一个语句分隔符。这些语句不会同时执行 - 数据库中没有任何内容,所有内容都排队等待。按提交顺序处理(虽然摆弄隔离级别可以解决这个问题。)

然而,大多数API& IDE会阻止多个语句执行,以阻止SQL注入攻击。你找到的是什么使你停止执行声明?

答案 3 :(得分:1)

如果您希望它们立即发生,您可以使用交易:

SET autocommit=0;
START TRANSACTION;
update accounts set type=1 where id=2;
update accounts set type=3 where id=4;
COMMIT;

请注意,您需要禁用自动提交,否则将在第一次更新时进行提交。

答案 4 :(得分:0)

您可能会发现此文章很有趣。我的评论比文章更多,但文章很有趣: http://blog.bubble.ro/how-to-make-multiple-updates-using-a-single-query-in-mysql/

他的技术可能不适合你,但这是一种方法。

最好的办法是编写一个存储过程并让它进行多次更新,或者,如果程序有某种方法来确定第二个查询的值,你可以使用一个触发器,但我希望不会帮助你。

答案 5 :(得分:0)

这不是通用解决方案,但在这种特殊情况下:

update accounts
   set type = id - 1
 where id = 2
    or id = 4;

这是一个声明......