gpt4 book ai didi

插入后MySQL触发器,操作JOIN 2个表

转载 作者:行者123 更新时间:2023-11-29 17:57:04 28 4
gpt4 key购买 nike

我需要在 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) 使用新的时。您不需要进一步使用表名进行限定,因此 new.z_taxo.id 无效,d 应该只是 new.id 2) 您不需要 mysql if 语句中的 begin..end block 3) if just does'在您的选择语句中引用表 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 ;

关于插入后MySQL触发器,操作JOIN 2个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48711334/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com