使用 select count 语句存储的 MySql 变量始终返回 1

标签 mysql stored-procedures

你好,在测试数据库中,我在客户表中只有一行。我创建了一个存储过程来完成一些工作。每次我执行这个查询

  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/

相关文章:

sql - 共享存储过程

php - 使用数组将数据插入数据库

php - php 形式的意外错误消息(SQL 语法错误)

php - 尝试使用 Eloquent 关系时尝试获取非对象错误的属性

php - Mysql 存储过程

java - 如何在 MySQL 表中添加 GENERATED BY DEFAULT AS IDENTITY?

mysql - 无法在mysql中创建存储过程

php - 基于此表,如何获得预期的输出 mysql php?

mysql - 如果表中有大列,即使未选择这些列,SQL 查询在内存方面是否更多 "expensive"?

tsql - SQL Server 变量的微妙之处