你好,在测试数据库中,我在客户表中只有一行。我创建了一个存储过程来完成一些工作。每次我执行这个查询
select count(*) from Customer where Email= ....
在我的数据库中,我的计数为 0,但在我的存储过程中,结果始终为 1,没有任何错误。这是我的存储过程中的代码。
BEGIN
START TRANSACTION;
SET @var=(select count(*) from Customer where Email=email);
select @var;
if (@var>0) then
update Customer Set Password=temppass,TemporaryPassword=temppass where
Email=email;
COMMIT;
ELSE
ROLLBACK;
END IF;
END
有什么想法吗?谢谢!
最佳答案
问题是您的条件 Email = email
。这总是正确的——因为对 email
的两个引用都指的是同一事物,表中的 email
列。
用不同的名称调用变量。我经常使用后缀 v_
,所以 where customer.email = v_email
。
也就是说,我认为你可以这样做:
begin
update Customer c
set c.Password = v_temppass,
c.TemporaryPassword = v_temppass
where c.email = v_email;
end;
我看不到交易提供了什么值(value)。
我假设您没有以明文形式存储密码。如果您非常关心安全性和访问权限,那绝对是一个禁忌。
关于使用 select count 语句存储的 MySql 变量始终返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040102/