小编典典

MySQL触发器无法更新表-得到错误1442

mysql

我有以下触发器:

CREATE TRIGGER sum
AFTER INSERT
ON news
FOR EACH ROW
UPDATE news SET NEW.sum = (NEW.int_views + NEW.ext_views)/NEW.pageviews

它将表格的int_viewsext_views列相加,然后将它们除以总的综合浏览量。

每当我尝试向新闻添加新行时,都会出现以下错误:

ERROR 1442 (HY000) at line 3: Can't update table 'news' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

触发对我来说似乎很简单。触发器无法运行是有原因的吗?


阅读 925

收藏
2020-05-17

共1个答案

小编典典

症状 是,你正在运行UPDATE一个内部(所有行)INSERT触发-无论是修改表,这是不允许的。

就是说,如果我正确地想到了触发器的意图,则您不想更新 所有 行,而只希望更新新插入的行。您可以轻松实现

CREATE TRIGGER sum
BEFORE INSERT
ON news
FOR EACH ROW
SET NEW.sum = (NEW.int_views + NEW.ext_views)/NEW.pageviews

请注意,这是一个BEFORE INSERT触发器,因为您想在将行写入表之前对其进行更改。

2020-05-17