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

Update if exist else insert not working

我需要有关 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;