【问题标题】:MySql INSERT INTO variables ignore WHERE conditionMySql INSERT INTO 变量忽略 WHERE 条件
【发布时间】:2020-06-07 01:45:15
【问题描述】:

我有一个表“用户”,在这个表中我有 1 行用户名“测试”。 一旦我尝试填充这些变量,他就会忽略 where 条件并获取第一个条目。我做错了什么?

SELECT `username`, `password`, `active`, `login_attempts`, `mail`
INTO @username, @password, @active, @login_attempts, @mail
FROM `security`.`users`
WHERE `username` = 'ts';
SELECT @username;

结果:@用户名:测试

在这种情况下,它不应该返回任何值,对吧?

【问题讨论】:

    标签: mysql mysql-workbench


    【解决方案1】:

    如果 MySQL 没有找到任何行,它不会null 覆盖变量,但它会保留旧值!因此,您的最终select 将在您执行select ... into 之前向您显示它包含的用户名,因此可能是您查询现有用户名的先前运行(在同一会话中)的结果。

    同样,如果您在没有into 的情况下运行查询,但没有找到一行,您将得到0 行,而不是带有null 的行(可以分配给您的变量)。

    要验证,请在 select ... into 之前运行 select @username;,它将包含旧用户名。

    您需要在运行查询之前(重新)初始化值,例如做

    SELECT null, null, null, null, null
    INTO @username, @password, @active, @login_attempts, @mail;
    
    SELECT username, password, active, login_attempts, mail
    INTO @username, @password, @active, @login_attempts, @mail
    FROM security.users
    WHERE username = 'ts';
    
    SELECT @username;
    

    如果您开始一个新会话,该变量还不存在,这就是 sonus' answer 为您工作的原因,因为它是您在新会话中运行的第一个查询。如果您点击 MySQL 工作台中的重新连接按钮,您可以获得类似的效果。

    【讨论】:

      【解决方案2】:

      SELECT username, password, active, login_attempts, mail INTO @username, @password, @active, @login_attempts, @mail FROM security.users WHERE username = 'ts'; SELECT @username;

      尝试在通常存储在 /usr/bin/mysql 中的终端的 mysql 中运行它 运行 /usr/bin/mysql -u usernameOfYourComputer -p 如果它很可能会起作用,那么它只是 mysql-workbench 中的一个错误

      【讨论】:

      • 是的,它成功了!你有什么我可以使用的 mysql gui 推荐吗?
      • 我通常在终端上做,但当我不这样做时,我自己使用 mysql-workbench。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 2015-04-22
      • 2016-06-05
      • 1970-01-01
      相关资源
      最近更新 更多