因为这篇文章在我搜索 MySQL 触发器中的错误处理时排名靠前,所以我想我会分享一些知识。
如果出现错误,您可以强制 MySQL 使用SIGNAL,但如果您不将其指定为 SQLEXCEPTION 类,则不会发生任何事情,因为并非所有 SQLSTATE 都被认为是坏的,即使那样您也必须如果您有任何嵌套的 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+ 版本。