Как приостановить выполнения SQL после триггера? То есть, при определенных условиях, описанных в триггере надо остановить выполнения SQL который и вызвал этот триггер.
Я размышлял и гуглил на эту тему, но единственное что у меня получилось, это выполнять ошибочный SQL-код, тем самым останавливать выполнение SQL кода, который выполнится после триггера.
Задача была такая, что у кастомеров есть статусы, но если новый статус (который устанавливается) меньше чем текущий, то надо приостановить такой запрос.
Городить проверки на стороне скриптового языка не хотелось, ибо это поведение должно быть глобальным, да и переписывать чудо-код доставшийся мне по наследству совсем не хотелось.
Ну это все слова, а теперь покажу реализацию:
DROP TRIGGER IF EXISTS `customers_update_status`//
CREATE TRIGGER `customers_update_status` BEFORE UPDATE ON `customers` FOR EACH ROW BEGIN
IF NEW.`status` < OLD.`status` THEN
BEGIN
INSERT INTO `customers` SET OLD.`status` = "STOP_SQL_QUERY";
END;
END IF;
END//
delimiter ;
Поле status имеет тип ENUM и у него нет значения STOP_SQL_QUERY, поэтому происходит ошибка и SQL-запрос идущий за триггером не выполняется. Это не корректное, но единственное найденное мной решение. Вообще, наверное еще лучше чтобы был не INSERT, а UPDATE. Тогда будет ошибка более корректна с виду.
зы. Кстати на в камментах приводится именно такой способ по остановке выполнения sql-запроса.



