Триггер в MySQL - PullRequest
       4

Триггер в MySQL

1 голос
/ 12 декабря 2011

Я пытаюсь создать триггер, в котором он будет вставлять новую строку в таблицу ADMIN_EMAIL_DOMAINS.

CREATE TRIGGER email_domain_insert AFTER INSERT ON USERS
FOR EACH ROW 
BEGIN
    IF NOT EXISTS (SELECT * FROM (SELECT DISTINCT SUBSTRING_INDEX(USR_EMAIL, '@', -1) as domain FROM USERS) as a WHERE a.domain = SUBSTRING_INDEX(NEW.USR_EMAIL, '@', -1)) THEN
        INSERT INTO ADMIN_EMAIL_DOMAINS (DOMAIN_NAME, VISIBLE) VALUES (SUBSTRING_INDEX(NEW.USR_EMAIL, '@', -1), 1);
    END IF;
END //

Что я хотел бы сделать, это каждый раз, когда я создаю нового пользователя, я бы проверял его электронную почтурасширение, а затем вставьте его в таблицу ADMIN_EMAIL_DOMAINS, если этого DOMAIN_NAME еще не существует.

Моя проблема в том, что при попытке его выполнить возникает ошибка SQL

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your      MySQL server version for the right syntax to use near '' at line 5 

Я что-то упустил?

1 Ответ

3 голосов
/ 12 декабря 2011

Я могу предложить вам другой способ - сделать поле DOMAIN_NAME уникальным и попытаться вставить новые домены в таблицу ADMIN_EMAIL_DOMAINS с параметром IGNORE , например -

DELIMITER $$

CREATE TRIGGER email_domain_insert
  AFTER INSERT
  ON users
  FOR EACH ROW
BEGIN
  INSERT IGNORE INTO ADMIN_EMAIL_DOMAINS (DOMAIN_NAME, VISIBLE) VALUES (SUBSTRING_INDEX(NEW.USR_EMAIL, '@', -1), 1);
END    

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...