gpt4 book ai didi

mysql - 当更新记录时,如何防止 MySQL 存储过程中的变量值发生变化?

转载 作者:可可西里 更新时间:2023-11-01 07:38:14 26 4
gpt4 key购买 nike

我一定是忽略了一些简单的事情。我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com