我有这个存储过程:
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是主键,auto_incremented,电子邮件字段具有唯一索引;所以,2行不可能包含相同的电子邮件;但是,无论何时我调用该过程,'select ... into'总是返回超过1行,即使该行电子邮件地址只存在行。 我明白我可以通过使用限制1和'使用id desc'命令来限制它只返回一行;但是,我的问题是:
答案 0 :(得分:1)
LAST_INSERT_ID()函数是获取最后一个自动增量值的正确方法。
答案 1 :(得分:1)
@ user705339 LAST_INSERT_ID()在某些情况下可能不会返回所需的id,例如,如果您尝试插入重复的电子邮件,则insert语句将返回错误,并且LAST_INSERT_ID()的值未定义。 / p>
您的问题是对电子邮件的模糊引用,where email=email
始终为true,返回表registration_application
中的所有行。而不是预期的单行。
由于您正在设置emailer=email
,您可以执行的操作是:
select id into max_row from registration_application where email=emailer order by id;