MySql插入变量忽略WHERE条件

MySql插入变量忽略WHERE条件,mysql,mysql-workbench,Mysql,Mysql Workbench,我有一个表“users”,在这个表中我有一行用户名为“test”。 只要我尝试填充这些变量,他就会忽略where条件并获取第一个条目。我做错了什么 SELECT `username`, `password`, `active`, `login_attempts`, `mail` INTO @username, @password, @active, @login_attempts, @mail FROM `security`.`users` WHERE `username` = 'ts'; SE

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

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


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

选择用户名、密码、活动、登录尝试、邮件 进入@username、@password、@active、@login\u尝试、@mail 来自security.users 其中username='ts'; 选择@username

尝试在mysql中为通常存储在/usr/bin/mysql中的终端运行此命令 运行/usr/bin/mysql-u usernameOfYourComputer-p
如果它能正常工作,那么它只是mysql工作台中的一个bug

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

类似地,如果在没有
的情况下将查询运行到
,并且没有找到行,那么将得到0行,而不是
为null的行(可以分配给变量)

要验证,请运行
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;

如果启动一个新会话,该变量还不存在,这就是为什么它对您有效,因为它是您在新会话中运行的第一个查询。如果点击MySQL工作台中的“重新连接”按钮,您也可以获得类似的效果。

是的,它起作用了!你有没有建议我可以使用哪个mysql gui?我通常在终端上使用,但当我没有的时候,我自己使用mysql workbench。