MySQL Insert else delete хранимая процедура

В настоящее время я работаю над системой переключения, которая позволит пользователям добавлять элементы в коллекцию. Затем они могут удалить элементы, которые удаляют строку из базы данных. Это легко сделать с помощью 2 запросов, но я хотел бы заменить это хранимой процедурой, чтобы избежать необходимости делать это с помощью 2 запросов. Что я хочу сделать, так это проверить, существует ли строка, если она действительно удаляет ее, если не вставляет ее.

Я использую phpmyadmin и пытаюсь создать рутину. I have added 2 (itemid, use parameters that are set to » IN»

IF (SELECT 1 = 1 FROM useritems WHERE ItemID = itemid AND UserID = userid) THEN 
    BEGIN 
        DELETE FROM useritems WHERE ItemID = itemid AND UserID = userid
    END;
ELSE
    BEGIN
        INSERT INTO useritems (ItemID, UserID) VALUES(itemid, userid)
    END;
END IF;

При попытке отправить его я получаю следующую ошибку

MySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END;
ELSE
    BEGIN
        INSERT INTO useritems (ItemID, UserID) VALUES(ite' at line 4

2 ответа

  1. IF (SELECT * FROM useritems WHERE ItemID = itemid AND UserID = userid) 
    THEN
             DELETE FROM useritems WHERE ItemID = itemid AND UserID = userid
    ELSE 
             INSERT INTO useritems (ItemID, UserID) VALUES(itemid, userid)
    END IF;
    
  2. Это правильный синтаксис для IFинструкции in MySQL:

    IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
    END IF

    Ссылка на сайт MySQL Dev

    Так что исправьте свой код, чтобы быть таким:

    IF EXISTS (SELECT 1 FROM useritems WHERE ItemID = itemid AND UserID = userid) THEN 
    
        DELETE FROM useritems WHERE ItemID = itemid AND UserID = userid;
    ELSE
        INSERT INTO useritems (ItemID, UserID) VALUES(itemid, userid);
    END IF;