Синтаксическая ошибка в Mysql Delete Trigger с условиями - PullRequest
0 голосов
/ 11 сентября 2018

Я написал небольшую триггерную функцию в MySQL. Это триггерный запрос, который я написал и выдает синтаксическую ошибку в коде.

Ошибка:

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного использования синтаксиса около 'cp WHERE cp. customer_plan_id = first_id;

DELIMITER $$
CREATE TRIGGER delete_plan_on_delete_customer 
    AFTER DELETE ON customers
    FOR EACH ROW 
BEGIN
    DECLARE active_plan INT;
    DECLARE first_id INT;

    SET active_plan = (SELECT is_active
    FROM customer_plans 
    WHERE customer_id=OLD.customer_id AND first_plan_id=1);

    if(active_plan = 0)THEN

        SET first_id = (SELECT customer_plan_id
        FROM customer_plans 
        WHERE customer_id=OLD.customer_id AND first_plan_id=1);

        DELETE customer_plans cp WHERE `cp`.`customer_plan_id`= first_id;
   END IF; 
END$$
DELIMITER ;

1 Ответ

0 голосов
/ 11 сентября 2018

Синтаксис запроса DELETE, из Документация MySQL :

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

Измените свои DELETE строки в триггере на:

DELETE FROM customer_plans WHERE customer_plan_id = first_id;

Sidenote: Исходя из моего личного опыта, это хорошая привычка ОБЪЯВЛЯТЬ значения по умолчанию для переменных. например:

DECLARE active_plan INT(11) DEFAULT 0;
DECLARE first_id INT(11) DEFAULT 0;
...