php - 帮助 MySql 触发器或替代

标签 php mysql triggers

我试图在这里将两个独立的设计结合在一起,所以我知道整体方法可能并不理想。基本上是通过用户在 PHP table1 中输入并填充 table2 的一部分,然后我需要自动填充 table2 和 table3 的其余部分。

我有以下数据库

enter image description here

用这个触发器

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/

相关文章:

php - 重定向到同一页面以锚定

php - 从具有特定内容(特殊字符)的数组中删除元素

asp.net - 如何自动生成具有特定字符串的用户名?

php - 如何通过查询同一行中的另一个值来返回特定 mysql 单元格中的内容?

triggers - Knockout.JS:根据可观察的变化触发

ios - 让所有 UI 元素触发其初始值的聪明方法?

php - Mysqli 总是以字符串形式返回数字

php - 错误 508 - 达到资源限制(php+mysql+jquery)站点

php - 从数据库中获取行,然后使用数据库中的其他行修改它们

上一行的 MySQL 触发器