我试图在这里将两个独立的设计结合在一起,所以我知道整体方法可能并不理想。基本上是通过用户在 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;
最佳答案
您不能使用 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;
关于php - 帮助 MySql 触发器或替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7547620/