2009-10-15 36 views
1
update accounts set type=1 where id=2; 

update accounts set type=3 where id=4; 
+0

嗯,根據你在那裏寫的陳述,你不能將這兩個更新語句組合在一起。你正在使用哪種編程語言? – mauris

回答

3

同時?如果您的意思是在查詢完成之前您想確保沒有其他查詢影響表格,那麼您將要將它們包裝在一個事務中。

2

正是你問什麼會

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

但總的來說,這是當然的impossibe。

0

您可能會覺得這篇文章很有趣。我得到的評論比文章更多,但文章很有趣: http://blog.bubble.ro/how-to-make-multiple-updates-using-a-single-query-in-mysql/

他的技術可能不適合你,但它是一種方法。

最好的辦法是編寫一個存儲過程並讓它執行多次更新,或者,如果程序有某種方法來確定第二個查詢的值,則可以使用觸發器,但我期望那不會幫助你。

1

此:

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

...是可以接受的SQL語句的語法 - 的 「;」是一個語句分隔符。這些語句不會同時執行 - 數據庫中沒有任何內容,所有內容都按照提交順序處理(儘管擺脫隔離級別可以解決這個問題)。

但是,大多數APIs會阻止像這樣的多個語句執行,以阻止SQL注入攻擊。你發現正在使用的是阻止你執行語句?

0

這不是一個通用的解決方案,但在這種特殊情況下:

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

這是一個說法......

1

如果你希望他們一次,你可以使用一個交易發生:

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

請注意,您需要禁用自動提交或在第一次更新時發生提交。