与select count语句一起存储的MySql变量始终返回1

时间:2017-09-04 15:22:33

标签: mysql stored-procedures

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

有任何想法吗?谢谢!

1 个答案:

答案 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;

我看不到交易的价值。

我假设您没有将密码存储为明文。如果您完全关心安全性和访问权限,那肯定是禁忌。