选择受更新影响的行

时间:2010-12-01 10:43:48

标签: sql mysql

如果我有一个包含此字段的表格:

int:id_account
int:session
string:password

现在对于登录语句,我运行这个sql UPDATE命令:

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

然后我检查一行是否受到影响,如果确实受到了影响,我知道密码是正确的。

接下来我要做的是检索此受影响行的所有信息,以便我将获得其余的字段信息。
我可以使用一个简单的SELECT语句,但我确定我在这里遗漏了一些东西,你必须有一个更好的方式,你们大师知道,并告诉我(:) 自从我写过第一次登录sql语句以来,它一直困扰着我。

如果UPDATE确实更新了行,是否有任何以性能方式将SELECT组合到UPDATE的方法?
或者我最好将两个陈述简单地留下来?不需要原子性,所以我最好远离表锁,例如,没有?

3 个答案:

答案 0 :(得分:3)

您应该对SELECT使用相同的WHERE语句。它将返回修改后的行,因为您的UPDATE没有更改用于查找的任何列:

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')

答案 1 :(得分:1)

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

SQL的跟进是好的和简单的(总是很好),但它可能不会给系统带来压力。

答案 2 :(得分: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

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