选择受更新

问题描述:

行。如果我有这个字段的表:
选择受更新

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

ROW_COUNT()(请阅读文档中的详细信息)。

通过SQL进行后续操作确实很简单(这总是很好),但它可能不必要强调系统。

您应该使用相同的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') 

这不会对语句,如工作...

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 

如果幸运的话,您可以将临时表的记录加入表中的唯一字段以验证更新。这只是枚举记录很重要的一个小例子。