我正在创建一个存储过程来注册用户 这是创建:
CREATE TABLE User (
UID INT AUTO_INCREMENT,
Fname VARCHAR(32) NOT NULL,
Lname VARCHAR(32) NOT NULL,
Phone VARCHAR(32),
Email VARCHAR(50),
Pass VARCHAR(32),
CONSTRAINT User_PK PRIMARY KEY(EmpID),
CONSTRAINT User_UK1 UNIQUE (FName, LName, Phone),
CONSTRAINT User_UK2 UNIQUE (FName, LName, Email),
CONSTRAINT User_UK3 UNIQUE (Email, Pass)
)ENGINE=InnoDB;
到目前为止,这是存储过程:
DELIMITER //
CREATE PROCEDURE regUser(fname VARCHAR(32),lname VARCHAR(32),phone VARCHAR(32), email VARCHAR(50), pass VARCHAR(32))
BEGIN
DECLARE uid INT;
DECLARE CONTINUE HANDLER FOR 1062 BEGIN END;
START TRANSACTION;
INSERT INTO User(Fname, Lname, Phone, Email, Pass) VALUES(fname, lname, phone, email, pass);
SELECT UID FROM User WHERE Phone=phone OR Email=email AND Fname=fname AND Lname=lname;
COMMIT;
END //
DELIMITER ;
在存储过程中,它尝试插入,如果找到重复条目,则继续处理程序(1062)捕获错误并且不执行任何操作。 插入(或缺少)后,我想选择插入行的UID,或者预先存在的行的UID(如果由于重复而没有插入)
发生了什么:SELECT UID..WHERE ...返回一个包含4个NULL值的列而不是行WHERE Phone=phone OR Email=email AND Fname=fname AND Lname=lname;
的UID
我相信4个NULL值是因为我目前在User表中有4个用户。
我对此感到困惑,如果我在存储过程之外执行SELECT UID..WHERE ...它可以正常工作,返回UID WHERE Phone=phone...
当插入表中已有的用户以及尝试新的唯一用户时,我得到相同的结果NULL。