我正在尝试将两个单独的设计集中在一起,因此我理解整体方法可能并不理想。基本上通过PHP table1中的用户输入和table2的一部分填充,然后我需要自动填充table2和table3的其余部分。
我有以下数据库
使用此触发器
DELIMITER |
CREATE TRIGGER new_trigger AFTER INSERT on table2
FOR EACH ROW BEGIN
INSERT INTO table3(att1, DateCreated, DateUpdated)
VALUES('PG', now(), now());
UPDATE table2 SET table3Id = table3.LAST_INSERT_ID();
END;
|
DELIMITER ;
尽管MySQL在没有任何错误的情况下接受了写入的触发器,但在应用程序运行时会出现此错误:
General error: 1442 Can't update table 'table2' in stored function/trigger
because it is already used by statement which invoked this stored function/trigger
我相信这来自MySQL触发器无法操纵它们被分配到的表。因此,如果这是错误的原因,我怎么能达到相同的结果?
编辑:(答案)
感谢mootinator在这里和聊天中的帮助。这是他的解决方案,因为我需要它。
CREATE TRIGGER new_trigger BEFORE INSERT on table2
FOR EACH ROW BEGIN
INSERT INTO table3(att1, DateCreated, DateUpdated)
VALUES('PG', now(), now());
SET NEW.table3Id = LAST_INSERT_ID();
END;
答案 0 :(得分:2)
您无法使用AFTER触发器,因为您所做的新更改(可能)会导致AFTER触发器在无限循环中再次运行。在编写之前,您必须使用BEFORE触发器编辑行。
尝试例如:
CREATE TRIGGER new_trigger BEFORE INSERT on table2
FOR EACH ROW BEGIN
INSERT INTO table3(att1, DateCreated, DateUpdated)
VALUES('PG', now(), now());
SET NEW.table3Id = LAST_INSERT_ID();
END;