当前位置: 首页 > 面试题库 >

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

席乐童
2023-03-14
问题内容

我有以下触发器:

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.

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


问题答案:

症状 是,你正在运行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触发器,因为您想在将行写入表之前对其进行更改。



 类似资料:
  • 问题内容: 我正在使用MySQL和Engine InnoDB。我有一个SQL表(简体),其中包含4列,如您在这张图片中看到的: 当需求的状态变为“完成”时,我希望其优先级为空,并且所有具有上述优先级的需求都将递减。 例如,如果第二个需求:“面包”为“完成”,则其优先级将设置为空,并且我希望“黄油”的优先级为2,“果酱”的优先级为3。 我有这个触发条件: 但是,当我从“进行中”到“完成”的状态编辑行

  • userNotesTable: 用户提醒表: 插入触发器: 更新触发器: 这是数据库的当前代码,以及提醒表的特定触发器。我遇到的困难是,从提醒表中的specific中的user notes表中选择特定的名称和额外的内容,所有这些都在更新触发器中。 插入时,和会被插入到提醒和搜索表中,但我希望能够使用特定名称和用户注释表中的额外内容更新搜索表,这可能吗?

  • 嗨,我正在将我的所有表从一个数据库导入到另一个数据库,但不知何故,触发器没有被导入。使用MySQL5.6。所以我试图从以前的数据库中复制触发器语句来创建当前数据库中的触发器。分隔符$$ 我在工作台的输出部分中得到的错误 知道我做错了什么吗

  • 我有两张表“产品”和“库存”。表将包含所有产品。在库存表中,我每次都将产品的库存保存为一个新的条目。 我有两种类型的产品。“1”类型的产品将以stock作为编号,“0”类型的产品将以stock作为重量。因此,在products表中,我创建了两列“stock_weight(保持在库存表中输入的总重量)”和“pieces(保持在库存表中输入的总数量)”。 为此,我在stock表上创建了一个触发器,每当

  • 我在WordPress数据库中编写了一个MySQL触发器&它给出了一个错误。我的触发器代码如下: 它会给出以下错误消息: 错误 SQL查询:文档 CREATE[DEFINER={user CURRENT_USER}]trigger up_trig AFTER INSERT ON每一行BEGIN DECLARE“选择DISTINCT()INTOFROM其中='panchayat_id'和=new。(

  • 我正在尝试创建一个触发器,该触发器将在更新另一个表之后更新一个表。我需要它,这样如果数字列中的一个数字被更新,那么这需要记录在另一个表中。这就是我到目前为止所拥有的。。 测试更新到表: 如您所见,我正在尝试将新插入的用户编号存储到一个变量中,然后该变量将用于填充user_changes表的insertednumber列。任何帮助都将不胜感激,谢谢!