我一定是忽略了一些简单的事情。我在 MySQL 存储过程中根据查询结果设置一个变量,如下所示:
SELECT @myName := username FROM User WHERE ID=1;
因此,@myName 正在存储用户 ID 1 的用户名,即“Paul”。太好了。
但稍后在存储过程中我对该记录运行更新:
UPDATE User SET username = 'Fred' WHERE ID=1;
现在,出于某种原因,@myName = 'Fred' 但它仍应等于 'Paul',对吧?看起来 MySQL 只是创建一个指向记录的指针,而不是将静态值存储在 @myName 变量中。
简而言之,我希望能够将查询结果中的值存储在变量中,并确保我的变量的值不会改变,即使表中的数据是根据更改设置的。
我错过了什么?提前致谢!
最佳答案
这非常令人惊讶,我同意。我不确定如何解释它,但为了它的值(value),试试这个:
SELECT username INTO myName FROM User WHERE ID=1;
参见 http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html
更新:我正在尝试重现此问题,但我做不到。我在 Mac OS X 上使用 MySQL 5.0.51。
drop table if exists user;
create table user (
id serial primary key,
username varchar(10)
);
insert into user (username) values ('Paul');
drop procedure if exists doit;
delimiter !!
create procedure doit()
begin
declare name varchar(10);
select @name:=username from user where id=1;
select @name; -- shows 'Paul' as expected
update user set username = 'Fred' where id=1;
select @name; -- still shows 'Paul'
end!!
delimiter ;
call doit();
您能否在您的测试数据库中尝试上面的代码,如果它出现您描述的问题,请告诉我们?
关于mysql - 当更新记录时,如何防止 MySQL 存储过程中的变量值发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/278633/