2011-06-28 40 views
1
UPDATE myTable SET niceColumn=1 WHERE someVal=1; 

SELECT * FROM myTable WHERE someVal=1; 

有沒有辦法將這兩個查詢合併爲一個?我的意思是我可以運行更新查詢,並顯示它更新的行。因爲這裏我使用「where id = 1」過濾兩次,我不想要這樣。此外,我認爲如果在選擇查詢之前someVal發生變化,我將遇到麻煩(例如:update更新它,之後someVal由於其他腳本而變爲0)。更新並顯示mysql查詢

+0

任何你不想要的原因? – Jacob

+0

顯示它更新的行不同於選擇具有某個值的行... – amosrivera

+0

我不想兩次做同樣的工作,假設我有一張大桌子。 – denizeren

回答

2

總結這兩個查詢在交易與所需ISOLATION LEVEL所以沒有其他線程可以在不影響鎖定的更新和選擇之間行。

0

如果在您的真實代碼中,條件部分(where等等)太長而無法重複,請將其放入您在兩個查詢中使用的變量中。

除非遇到不同的問題,否則不應該需要這兩個組合。

+1

不,你不能把2個查詢放到一個mysql_query中 – genesis

+0

哦,我從來沒有嘗試過,但完全認爲你可以= /我的壞。 – Kokos

0

實際上,即使你所做的都不會顯示它更新的行,因爲與此同時(更新後)某個進程可能會添加/更改行。

,這將顯示所有記錄,包括那些在昨天更新的:)

如果我想看看到底是哪行被改變,我會用臨時表去。首先將所有要更新的行ID選擇到臨時表中。然後根據臨時表中的原始ID執行更新,然後返回臨時表。

CREATE TEMPORARY TABLE to_be_updated 
SELECT id 
FROM myTable 
WHERE someVal = 1; 

UPDATE myTable 
SET niceColumn = 1 
WHERE id IN (SELECT * FROM to_be_updated); 

SELECT * 
FROM myTable 
WHERE id IN (SELECT * FROM to_be_updated)