UPDATE myTable SET niceColumn=1 WHERE someVal=1;
SELECT * FROM myTable WHERE someVal=1;
有沒有辦法將這兩個查詢合併爲一個?我的意思是我可以運行更新查詢,並顯示它更新的行。因爲這裏我使用「where id = 1」過濾兩次,我不想要這樣。此外,我認爲如果在選擇查詢之前someVal發生變化,我將遇到麻煩(例如:update更新它,之後someVal由於其他腳本而變爲0)。更新並顯示mysql查詢
UPDATE myTable SET niceColumn=1 WHERE someVal=1;
SELECT * FROM myTable WHERE someVal=1;
有沒有辦法將這兩個查詢合併爲一個?我的意思是我可以運行更新查詢,並顯示它更新的行。因爲這裏我使用「where id = 1」過濾兩次,我不想要這樣。此外,我認爲如果在選擇查詢之前someVal發生變化,我將遇到麻煩(例如:update更新它,之後someVal由於其他腳本而變爲0)。更新並顯示mysql查詢
總結這兩個查詢在交易與所需ISOLATION LEVEL
所以沒有其他線程可以在不影響鎖定的更新和選擇之間行。
實際上,即使你所做的都不會顯示它更新的行,因爲與此同時(更新後)某個進程可能會添加/更改行。
,這將顯示所有記錄,包括那些在昨天更新的:)
如果我想看看到底是哪行被改變,我會用臨時表去。首先將所有要更新的行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)
任何你不想要的原因? – Jacob
顯示它更新的行不同於選擇具有某個值的行... – amosrivera
我不想兩次做同樣的工作,假設我有一張大桌子。 – denizeren