我需要在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插件。提前谢谢!
答案 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 ;