2010-12-01 99 views
3

行。如果我有這個字段的表:
選擇受更新

int:id_account 
int:session 
string:password 

現在對於登錄聲明我運行這個SQL更新命令:

UPDATE tbl_name 
SET session = session + 1 
WHERE id_account = 17 AND password = 'apple' 

然後我檢查一排受到影響,如果確實受到影響,我知道密碼是正確的。

接下來我想要做的是檢索這個受影響的行的所有信息,所以我會有其餘的字段信息。
我可以使用一個簡單的SELECT語句,但我敢肯定我在這裏錯過了一些東西,必須有一個整潔的方式,你大師知道,並會告訴我有關(:
除了它困擾我自第一次登錄SQL發言中,我曾經寫過。

是否有任何性能明智的方式來一個SELECT合併成一個UPDATE如果UPDATE做更新行?
還是我更好的離去使用簡單的兩種說法?原子性不需要,所以我可能更好地遠離表鎖,例如,沒有?

+0

在Oracle中,您使用SQL%Rowcount來檢查最後一個del/upd/ins如何影響許多**行。但是爲了檢索實際的行,你必須「SELECT」。嘗試谷歌模擬在MySQL – 2010-12-01 10:51:16

+0

我想我會去簡單,只是後續查詢 - 因爲原子性是不需要的。 – 2010-12-01 10:51:34

+0

別擔心:「session = session + 1」本身就是原子。我的感覺是,你最好有兩個陳述。 – RabidFire 2010-12-01 10:51:56

回答

1

ROW_COUNT()(請閱讀文檔中的詳細信息)。

通過SQL進行後續操作確實很簡單(這總是很好),但它可能不必要強調系統。

3

您應該使用相同的WHERE語句SEL ECT。這將返回修改的行,因爲你更新未更改用於查找任何列:

UPDATE tbl_name 
SET session = session + 1 
WHERE id_account = 17 AND password = 'apple'; 

SELECT * 
FROM tbl_name 
WHERE id_account = 17 AND password = 'apple'; 

一個忠告:不要密碼保存爲純文本!使用散列函數,如下所示:

MD5('apple') 
0

這不會對語句,如工作...

Update Table 
Set Value = 'Something Else' 
Where Value is Null 

Select Value From Table 
Where Value is Null 

你會改變與更新的價值,將無法恢復受影響的記錄,除非你事先存儲它們。

Select * Into #TempTable 
From Table 
Where Value is Null 

Update Table 
Set Value = 'Something Else' 
Where Value is Null 

Select Value, UniqueValue 
From #TempTable TT 
Join Table T 
TT.UniqueValue = T.UniqueValue 

如果幸運的話,您可以將臨時表的記錄加入表中的唯一字段以驗證更新。這只是枚舉記錄很重要的一個小例子。