update accounts set type=1 where id=2;
update accounts set type=3 where id=4;
答案 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;
这是一个声明......