插入前创建触发器

时间:2019-05-13 17:14:32

标签: mysql mysql-workbench

我想在Mysql中创建一个触发器。 在插入之前和更新之前,仅在其他表中存在ID时才插入值。

这是我的触发器(在插入之前),该触发器不起作用:

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 ;

我们还应该在if语句通过之后在table2内插入值吗?还是仅用于检查?

2 个答案:

答案 0 :(得分:2)

如果不存在(从table1中选择*,其中id = new.id),然后设置msg ='id not in table1'信号...如果存在,则会自动插入数据。

答案 1 :(得分:0)

  

...仅在另一个表中存在ID时才插入值。

听起来您只需要一个外键约束,而不是触发器。

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

如果尝试插入表1中id行,则会引发错误。

不需要触发器。