MySQL触发器不';不要在表格插入上工作

MySQL触发器不';不要在表格插入上工作,mysql,triggers,Mysql,Triggers,也许我只是有点糊涂,但希望有人能帮上忙。我试图为DateCreated列添加触发器,该列在添加行时触发。当我尝试添加时,我得到 无法更新存储函数/触发器中的表“products”,因为调用此存储函数/触发器的语句已使用该表 我意识到这是因为MySQL不会让我在插入之后触发,因为有一个递归循环,但是我的触发器之前有更新,我使用的是NEW。我的扳机丢了什么?另外,如果我想修改日期,我需要修改什么 触发 CREATE TRIGGER `DateCreatedTriggerTS` BEFORE INSE

也许我只是有点糊涂,但希望有人能帮上忙。我试图为DateCreated列添加触发器,该列在添加行时触发。当我尝试添加时,我得到

无法更新存储函数/触发器中的表“products”,因为调用此存储函数/触发器的语句已使用该表

我意识到这是因为MySQL不会让我在插入之后触发,因为有一个递归循环,但是我的触发器之前有更新,我使用的是NEW。我的扳机丢了什么?另外,如果我想修改日期,我需要修改什么

触发

CREATE TRIGGER `DateCreatedTriggerTS` BEFORE INSERT ON  `products` 
FOR EACH ROW UPDATE products SET DateEntered = NOW( ) WHERE ProductID = NEW.ProductID

在后面插入。即使这样做有效,您也有可能更改所有其他行,然后由于违反约束而导致插入失败。

在之后插入。即使这样做有效,您也有可能更改所有其他行,然后由于违反约束而导致插入失败。

ProductID是此products表中的唯一键吗?如果是这样,您的更新基本上只更新生成触发器的行,对吗

因此,这样做更简单:

CREATE TRIGGER `DateCreatedTriggerTS` BEFORE INSERT ON  `products` 
FOR EACH ROW SET NEW.DateEntered = NOW( );

这将仅更改生成触发器的行中DateEntered列的值。

ProductID在此products表中是否为唯一键?如果是这样,您的更新基本上只更新生成触发器的行,对吗

因此,这样做更简单:

CREATE TRIGGER `DateCreatedTriggerTS` BEFORE INSERT ON  `products` 
FOR EACH ROW SET NEW.DateEntered = NOW( );

这将只更改生成触发器的行中DateEntered列的值。

停下来问问自己,“update语句后记录指针在哪里,执行insert触发器需要在哪里”,您就会明白为什么不能这样做。如果这样做没有帮助,那么问问自己,“插入与更新的表、行或索引是如何锁定的?”TLDR:您不能这样做。尝试使用AFTER触发器,您可能会侥幸逃脱。停下来问问自己,“update语句后面的记录指针在哪里,执行insert触发器需要在哪里”,您就会明白为什么不能这样做。如果这样做没有帮助,那么问问自己,“插入与更新的表、行或索引是如何锁定的?”TLDR:您不能这样做。用后触发器试试,你可能会侥幸逃脱。啊,这两点你都是对的。这解决了我的问题,谢谢。啊,你在这两点上都是正确的。这解决了我的问题,谢谢。