Mysql 如果存在则更新,否则插入不起作用
我需要有关SQL过程的帮助。我已经尽我所能尝试了,但以下程序不起作用,需要帮助为什么不起作用Mysql 如果存在则更新,否则插入不起作用,mysql,sql,transactions,procedure,Mysql,Sql,Transactions,Procedure,我需要有关SQL过程的帮助。我已经尽我所能尝试了,但以下程序不起作用,需要帮助为什么不起作用 CREATE PROCEDURE updateUser (IN ID INT(11), name VARCHAR(100), email VARCHAR(100), role VARCHAR(9), gender VARCHAR(6), birthday VARCHAR(10), classroom INT(1
CREATE PROCEDURE updateUser
(IN ID INT(11),
name VARCHAR(100),
email VARCHAR(100),
role VARCHAR(9),
gender VARCHAR(6),
birthday VARCHAR(10),
classroom INT(11) )
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
IF EXISTS (SELECT * FROM student WHERE userID = ID)
BEGIN
UPDATE tbl_users
SET userName = name, userEmail = email, userRole = role,
gender = gender, birthday = birthday
WHERE userID = ID;
UPDATE student
SET classID = classroom
WHERE userID = ID;
END
ELSE
BEGIN
UPDATE tbl_users
SET userName = name, userEmail = email, userRole = role,
gender = gender, birthday = birthday
WHERE userID = ID;
INSERT INTO student(classID, userID)
VALUES (classroom, ID);
END
COMMIT TRANSACTION;
上面的“更新到学生查询”和“插入到查询”都是单独工作的。但在插入
IF EXISTS
时不可用 因为您正在使用MySQL。试试下面的代码,看看它是否有效
CREATE PROCEDURE updateUser
(IN ID INT(11),
name VARCHAR(100),
email VARCHAR(100),
role VARCHAR(9),
gender VARCHAR(6),
birthday VARCHAR(10),
classroom INT(11) )
BEGIN
IF EXISTS (SELECT * FROM student WHERE userID = ID) THEN
START TRANSACTION;
UPDATE tbl_users
SET userName = name, userEmail = email, userRole = role,
gender = gender, birthday = birthday
WHERE userID = ID;
UPDATE student
SET classID = classroom
WHERE userID = ID;
COMMIT;
ELSE
START TRANSACTION;
UPDATE tbl_users
SET userName = name, userEmail = email, userRole = role,
gender = gender, birthday = birthday
WHERE userID = ID;
INSERT INTO student(classID, userID)
VALUES (classroom, ID);
COMMIT;
END IF;
END;
你的意思是不工作?有错误吗?错误行为?请澄清您的问题。当我尝试在不使用if语句的情况下更新student表时,数据未插入或更新到数据库中。它有效。但是当我使用if语句时,它不起作用。我看不出问题出在哪里。我的建议是做一些调试。测试
是否存在
是否在某些打印消息中正常工作。删除事务。从一些基本的开始,逐步积累,直到你发现问题所在。