选择受更新
问题描述:
行。如果我有这个字段的表:
选择受更新
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做更新行?
还是我更好的离去使用简单的两种说法?原子性不需要,所以我可能更好地远离表锁,例如,没有?
答
您应该使用相同的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
如果幸运的话,您可以将临时表的记录加入表中的唯一字段以验证更新。这只是枚举记录很重要的一个小例子。
在Oracle中,您使用SQL%Rowcount来检查最后一个del/upd/ins如何影响许多**行。但是为了检索实际的行,你必须“SELECT”。尝试谷歌模拟在MySQL – 2010-12-01 10:51:16
我想我会去简单,只是后续查询 - 因为原子性是不需要的。 – 2010-12-01 10:51:34
别担心:“session = session + 1”本身就是原子。我的感觉是,你最好有两个陈述。 – RabidFire 2010-12-01 10:51:56