MySQL在触发器中停止事件
问题描述:
如何在触发器中停止Event
。例如:我有下面这个简单的代码:MySQL在触发器中停止事件
CREATE TRIGGER checkPlayer BEFORE INSERT ON players
BEGIN
DECLARE ctr INT;
SELECT count(*)
INTO ctr
FROM players
WHERE fName = NEW.fName
AND lName = NEW.lName;
IF ctr > 0 THEN
-- LEAVE and don't insert because player exists
END IF;
END
答
MySQL使用SIGNAL
这样的事情:
信号“重返”错误的方式。 SIGNAL向处理程序,应用程序的外部或客户端提供错误信息。此外,它还提供对错误特征(错误号,SQLSTATE值,消息)的控制。如果没有SIGNAL,有必要使用变通方法,例如故意引用不存在的表来导致例程返回错误。
任何error conditional in a BEFORE trigger(包括,据我所知,适当SIGNAL
值)将中止触发器以及触发触发器的语句。如果你的MySQL版本不支持SIGNAL
(即你的版本低于5.5),那么你将不得不以另一种方式触发错误,比如旧的“从不存在的表中选择”或者破解"violate a PK by a double INSERT" 。
我只有5.1方便,所以我无法验证SIGNAL
的东西。 “19.3.1。触发器语法”的相关部分对于5.1,5.2和5.5是相同的,尽管如此,如果你需要诉诸这些东西,那么“触发一个错误”的一个问题应该可以工作。
谢谢队友,我一直在寻找一个词来搜索,这实际上是你说的“信号”,真的有帮助 – bluezald