Mysql 如果存在则更新,否则插入不起作用

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

我需要有关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(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语句时,它不起作用。我看不出问题出在哪里。我的建议是做一些调试。测试
是否存在
是否在某些打印消息中正常工作。删除事务。从一些基本的开始,逐步积累,直到你发现问题所在。