Поскольку это занимает первое место в моем поиске обработки ошибок MySQL в триггерах, я решил поделиться своим решением для MySQL 5.5 +
Мой оригинальный пост: https://stackoverflow.com/a/26115231/1733365 Дублировано ниже ...
Поскольку эта статья выходит на первое место, когда я ищу обработку ошибок в триггерах MySQL, я решил поделиться некоторыми знаниями.
Если есть ошибка, вы можете заставить MySQL использовать SIGNAL , но если вы не укажете его как класс в качестве SQLEXCEPTION, то ничего не произойдет, так как не все SQLSTATE считаются плохими и даже в этом случае вы должны будете убедиться, что RESIGNAL , если у вас есть вложенные блоки BEGIN / END.
В качестве альтернативы и, возможно, еще проще, в вашем триггере объявить обработчик выхода и передать исключение.
CREATE TRIGGER `my_table_AINS` AFTER INSERT ON `my_table` FOR EACH ROW
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
RESIGNAL;
DECLARE EXIT HANDLER FOR SQLWARNING
RESIGNAL;
DECLARE EXIT HANDLER FOR NOT FOUND
RESIGNAL;
-- Do the work of the trigger.
END
И если в вашем теле произойдет ошибка, она будет отброшена наверх и выйдет с ошибкой. Это также может быть использовано в хранимых процедурах и еще много чего.
Это работает с любой версией 5.5 +.