【发布时间】:2010-12-01 10:43:47
【问题描述】:
如果我有一个包含这些字段的表格:
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 中?
还是我最好用两个语句简单地保留它?不需要原子性,所以我最好远离表锁,不是吗?
【问题讨论】:
-
在 Oracle 中,您有 SQL%Rowcount 来检查 如何 许多 行受到最后一个 del/upd/ins 的影响。但要检索实际行,您必须
SELECT。尝试用谷歌搜索 MySQL 中的类比 -
我想为了简单起见,只需跟进一个查询——因为不需要原子性。
-
别担心:“session = session + 1”本身就是原子的。我的感觉是你最好有两个陈述。
-
@Poni - 这似乎是一些设计问题,为什么需要将密码存储到会话表中?这个 session 表,你只需要 session 和 id_count。执行类似
insert into tbl_name select id_account, 1 from YOUR_USER_TABLE where id_account=17 AND password='apple' ON DUPLICATE KEY UPDATE session=session+1; -
@ajreal:您正在查看的表格是一个非常简化的示例,并不能真正代表我的表格,请不要忘记(: