MySql INSERT INTO 变量忽略 WHERE 条件
MySql INSERT INTO variables ignore WHERE condition
我有一个 table 'users' 并且在这个 table 中我有 1 行用户名 'test'。
一旦我尝试填充这些变量,他就会忽略 where 条件并获取第一个条目。我做错了什么?
SELECT `username`, `password`, `active`, `login_attempts`, `mail`
INTO @username, @password, @active, @login_attempts, @mail
FROM `security`.`users`
WHERE `username` = 'ts';
SELECT @username;
结果:@用户名:测试
在这种情况下,它不应该 return 任何值,对吗?
SELECT username, password, active, login_attempts, mail
INTO @username, @password, @active, @login_attempts, @mail
FROM security.users
WHERE username = 'ts';
SELECT @username;
尝试 运行在 mysql 中为通常存储在 /usr/bin/mysql 中的终端执行此操作
运行 /usr/bin/mysql -u usernameOfYourComputer -p
如果它很可能会起作用,那么它只是 mysql-workbench
中的一个错误
如果 MySQL 没有找到任何行,它 不会 用 null
覆盖变量,但它会保留旧值!因此,您的最终 select
将向您显示它在您执行 select ... into
之前包含的用户名,因此可能是您之前查询现有用户名的 运行(在同一会话中)的结果.
同样,如果您 运行 您的查询没有 into
,并且没有找到一行,您将得到 0 行,而不是带有 null
的行(这可能是分配给您的变量)。
为了验证,运行 select @username;
在您的 select ... into
之前,它将包含旧用户名。
您需要在 运行 查询之前(重新)初始化这些值,例如做
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 workbench 中的重新连接按钮,您可以获得类似的效果。
我有一个 table 'users' 并且在这个 table 中我有 1 行用户名 'test'。 一旦我尝试填充这些变量,他就会忽略 where 条件并获取第一个条目。我做错了什么?
SELECT `username`, `password`, `active`, `login_attempts`, `mail`
INTO @username, @password, @active, @login_attempts, @mail
FROM `security`.`users`
WHERE `username` = 'ts';
SELECT @username;
结果:@用户名:测试
在这种情况下,它不应该 return 任何值,对吗?
SELECT username, password, active, login_attempts, mail
INTO @username, @password, @active, @login_attempts, @mail
FROM security.users
WHERE username = 'ts';
SELECT @username;
尝试 运行在 mysql 中为通常存储在 /usr/bin/mysql 中的终端执行此操作 运行 /usr/bin/mysql -u usernameOfYourComputer -p 如果它很可能会起作用,那么它只是 mysql-workbench
中的一个错误如果 MySQL 没有找到任何行,它 不会 用 null
覆盖变量,但它会保留旧值!因此,您的最终 select
将向您显示它在您执行 select ... into
之前包含的用户名,因此可能是您之前查询现有用户名的 运行(在同一会话中)的结果.
同样,如果您 运行 您的查询没有 into
,并且没有找到一行,您将得到 0 行,而不是带有 null
的行(这可能是分配给您的变量)。
为了验证,运行 select @username;
在您的 select ... into
之前,它将包含旧用户名。
您需要在 运行 查询之前(重新)初始化这些值,例如做
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;
如果您开始一个新会话,该变量还不存在,这就是