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是相同的,尽管如此,如果你需要诉诸这些东西,那么“触发一个错误”的一个问题应该可以工作。

+0

谢谢队友,我一直在寻找一个词来搜索,这实际上是你说的“信号”,真的有帮助 – bluezald

我有一个迷你博客文章解释示例代码的信号。点击here。而不是通过插入两个具有相同主键的条目来生成异常,也可以使用divide by 0异常,该异常不涉及数据库中的插入语句。