如何停止触发器中的事件
。例如:我有下面这个简单的代码:
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 is the way to “return” an error. SIGNAL provides error information to a handler, to an outer portion of the application, or to the client. Also, it provides control over the error's characteristics (error number, SQLSTATE value, message). Without SIGNAL, it is necessary to resort to workarounds such as deliberately referring to a nonexistent table to cause a routine to return an error.
任何 error conditional in a BEFORE trigger (包括,据我所知,适当的信号值)将中止触发器和触发触发器的语句。如果您的 MySQL 版本不支持 SIGNAL(即您的版本低于 5.5),那么您将不得不以另一种方式触发错误,例如旧的“从不支持 SIGNAL 的表中选择”存在”黑客或 "violate a PK by a double INSERT"黑客攻击。
我手头上只有 5.1,所以我无法验证 SIGNAL
内容。 “19.3.1.触发语法”的相关部分对于 5.1、5.2 和 5.5 来说是相同的,因此如果您需要诉诸此类东西,“触发错误”组合之一应该可以工作。
关于sql - MySQL 停止触发器中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055423/