MySql插入变量忽略WHERE条件
我有一个表“users”,在这个表中我有一行用户名为“test”。 只要我尝试填充这些变量,他就会忽略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
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。