Создать триггер перед вставкой - PullRequest
0 голосов
/ 13 мая 2019

Я хочу создать триггер в Mysql.Перед вставкой и перед обновлением вставлять значения, только если идентификатор присутствует в другой таблице.

Вот мой триггер (до вставки), который не работает:

DELIMITER $$
CREATE TRIGGER 
    `before_insert_id`
BEFORE INSERT ON
    `table2`
FOR EACH ROW
    BEGIN
        DECLARE msg VARCHAR(255);
        IF NEW.id = 
            ( SELECT id
              FROM table2
              WHERE NEW.id not in (select id from table1)
            )
        THEN 
            SET msg = 'id not in table1';
            SIGNAL SQLSTATE '45002' SET message_text = msg ;
        END IF ;
    END ;

$$
DELIMITER ;

Также следуетмы вставляем значения в table2 внутрь после того, как оператор if проходит? или это только для проверки?

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

ЕСЛИ НЕ СУЩЕСТВУЕТ (выберите * из таблицы 1, где id = new.id), затем установите сигнал msg = 'id not in table1' ... end if;Если он существует, данные вставляются автоматически.

0 голосов
/ 13 мая 2019

... вставлять значения только в том случае, если идентификатор присутствует в другой таблице.

Звучит так, будто вам нужно ограничение внешнего ключа, а не триггер.

ALTER TABLE table2 ADD FOREIGN KEY (id) REFERENCES table1(id);

Это приведет к ошибке, если вы попытаетесь вставить строку с id, который не присутствует в таблице1.

Триггер не требуется.

...