MySQL存储过程,如果行不存在则插入。选择该行的id(插入行或预先存在的行)

时间:2014-05-08 20:40:05

标签: mysql select stored-procedures sql-insert

我正在创建一个存储过程来注册用户 这是创建:

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。

0 个答案:

没有答案