Hello在测试数据库中我在表customer中只有一行。我创建了一个存储过程来完成一些工作。每次我执行此查询
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
有任何想法吗?谢谢!
答案 0 :(得分:1)
问题在于您的条件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;
我看不到交易的价值。
我假设您没有将密码存储为明文。如果您完全关心安全性和访问权限,那肯定是禁忌。