gpt4 book ai didi

mysql - 选择....进入错误mysql

转载 作者:行者123 更新时间:2023-11-29 09:01:39 25 4
gpt4 key购买 nike

我有这个存储过程:

delimiter / 
drop procedure if exists registration / create procedure registration(email varchar(50), pass varchar(50), first_name varchar(30), last varchar(30), address varchar(100), city varchar(30), state_id int, zip varchar(20), phone varchar(15), alt_phone varchar(15), outlet varchar(100), url varchar(255), bio text, out response int, out photo_location varchar(40), image_type varchar(10), out emailer varchar(20), out max_row int)
start_:begin
start transaction;
insert into registration_application values(null, email, PASSWORD(pass), first_name, last, address, city, state_id, zip, phone, alt_phone, outlet, url, bio);
set emailer=email;
select id into max_row from registration_application where email=email order by id;
commit;
set response= 1;
end start_;

id为主键,自增,email字段有唯一索引;因此,两行不可能包含相同的电子邮件;但是,每当我调用该过程时,“select...into”总是返回超过 1 行,即使该电子邮件地址只存在一行。 我知道我可以通过使用 limit 1 和 'using order by id desc' 将其限制为仅返回一行;但是,我的问题是:

  • 问题是 mysql 中的错误吗?我在网上看到很多人都有类似的问题。
  • 由于我不知道我正在寻找的 id 位于什么位置(因为 select..into 显然返回了不止一行),有没有办法确保始终返回正确的 id?谢谢。

最佳答案

@user705339 正如您上面提到的,LAST_INSERT_ID() 在某些情况下可能不会返回所需的 id,例如,如果您尝试插入重复的电子邮件,插入语句将返回错误,并且 LAST_INSERT_ID() 的值未定义。

您的问题是对电子邮件的引用不明确,其中 email=email 始终为 true,返回表 registration_application 中的所有行。而不是预期的单行。

由于您正在设置 emailer=email,因此您可以执行以下操作:

select id into max_row from registration_application where email=emailer order by id;

关于mysql - 选择....进入错误mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8405944/

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