插入后的MySQL触发器,动作JOIN 2表

时间:2018-02-09 17:40:41

标签: mysql join triggers

我需要在MySQL上创建一个触发器(在一个表上插入之后),但是该动作需要连接2个表,以插入第三个表。我的脚本下面没有返回任何错误,但该行未插入第三个表。

第一个表(插入后触发器应该在其上工作):

Z_TAXO      
ID  term_ID taxo_name
1    1      dept
2    2      staff
3    4      course
4    5      dept

要在触发器中加入的第二个表:

Z_TERM  
term_ID name
1       Engineering
2       Andy
4       Metallurgy
5       Business
6       Arts

第三张表。如果Z_TAXO表的新行包含taxo_name = "dept",则需要将该行(与表Z_TERM连接)插入此表中:

Z_DEPTS 
ID  dept_name
1   Engineering
4   Business

我创建了一个触发器:

delimiter //
    CREATE TRIGGER TRG_NEW_DEPT
    AFTER INSERT ON Z_TAXO
    FOR EACH ROW
    BEGIN
        DECLARE _dept_ID bigint(20);
        DECLARE _dept_name varchar(200);
        IF Z_TAXO.taxo_name = "DEPT" THEN
            BEGIN
                SELECT Z_TAXO.ID INTO _dept_ID FROM Z_TAXO, Z_TERM
                WHERE Z_TAXO.ID = new.Z_TAXO.ID AND Z_TAXO.term_ID = Z_TERM.term_ID;
                SELECT Z_TERM.name INTO _dept_name FROM Z_TERM, Z_TAXO
                WHERE Z_TAXO.term_ID = Z_TERM.term_ID AND Z_TAXO.ID = new.Z_TAXO.ID;
                INSERT INTO Z_DEPTS (ID, dept_name) VALUES (_dept_ID, _dept_name);
            END;
        END IF;
    END//
delimiter ;

然后在Z_TAXO表中插入一行:

INSERT INTO Z_TAXO (ID, term_ID, taxo_name) VALUES (5, 6, "dept");

期望在表Z_DEPTS中添加这一新行:

ID  dept_name
5   Arts

但是当我select * from Z_DEPTS时,结果仍然是:

ID  dept_name
1   Engineering
4   Business

有什么不对?我无法修改表格的设计,因为它们来自wordpress插件。提前谢谢!

1 个答案:

答案 0 :(得分:0)

关于您的代码的一些评论。 1)使用新的时。你没有进一步限定表名的限定符,所以new.z_taxo.id是无效的,而且应该只是new.id 2)你不需要mysql中的begin..end块if语句3)如果只是没有在你的选择化身中引用z_taxo表是有意义的 - 一个简单的插入选择就可以了。

drop trigger if exists trg_new_dept;
delimiter //
    CREATE TRIGGER TRG_NEW_DEPT
    AFTER INSERT ON Z_TAXO
    FOR EACH ROW
    BEGIN
            INSERT INTO Z_DEPTS (ID, dept_name) 
            select term_id, name
            from z_term 
            where   term_id = new.term_id;
     END//
delimiter ;