我有以下触发器:
CREATE TRIGGER sum AFTER INSERT ON news FOR EACH ROW UPDATE news SET NEW.sum = (NEW.int_views + NEW.ext_views)/NEW.pageviews
它将表格的int_views和ext_views列相加,然后将它们除以总的综合浏览量。
int_views
ext_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.
触发对我来说似乎很简单。触发器无法运行是有原因的吗?
该 症状 是,你正在运行UPDATE一个内部(所有行)INSERT触发-无论是修改表,这是不允许的。
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触发器,因为您想在将行写入表之前对其进行更改。
BEFORE INSERT