如何创建MySQL触发器

如何创建MySQL触发器,mysql,triggers,Mysql,Triggers,我有一个表users,其中有两个字段id(数字)和email(完整的电子邮件地址)如何添加触发器,以防止添加具有特定域的新email记录,例如:*@somedomain.com?触发器如下所示: DELIMITER $$ CREATE TRIGGER USER_INSERT BEFORE INSERT ON USER FOR EACH ROW BEGIN IF new.email like '%@somedomain.com' THEN SIGNAL sqlstate '9

我有一个表
users
,其中有两个字段
id
(数字)和
email
(完整的电子邮件地址)如何添加触发器,以防止添加具有特定域的新
email
记录,例如:
*@somedomain.com

触发器如下所示:

DELIMITER $$

CREATE TRIGGER USER_INSERT BEFORE INSERT ON USER
    FOR EACH ROW
BEGIN
  IF new.email like '%@somedomain.com' THEN
    SIGNAL sqlstate '99999'
        SET message_text = 'Invalid domain';
  END IF;
END$$ 

DELIMITER ;

请试试这个:

DELIMITER $$

CREATE TRIGGER example_before_insert_reject_domains
     BEFORE INSERT ON example_tbl FOR EACH ROW
     BEGIN
          IF NEW.email LIKE '%@somedomain.com'
          THEN
               SIGNAL SQLSTATE '45000'
                    SET MESSAGE_TEXT = 'Cannot add or update row: invalid domain for email';
          END IF;
     END;
$$

通过在MySQL()中使用
create trigger
命令,AFAIK很难使用触发器阻止插入或更新。你能在你的应用程序层中进行此检查吗?@TimBiegeleisen通过引发错误来阻止触发器中的插入或更新并不难,但你肯定有一点需要在应用程序中完成,而不是在触发器中。您可以创建侦听insert语句并基于其值触发delete STATTENT的触发器