首页 > 解决方案 > 尝试更新先前插入的行时出现 INSERT 错误

问题描述

我的表的结构是:

id  id_pp id_a id_u     fecha_accion       tiempo
25    6     2   6     2018-07-06 11:53:44   NULL
26    6     3   3     2018-07-06 12:11:13   NULL
59    6     2   6     2018-07-10 10:37:28   NULL
63    6     3   3     2018-07-10 11:03:49   NULL
64    6     5   3     2018-07-10 11:03:56   NULL
65    6     7   3     2018-07-10 11:04:05   NULL
66    6     6   3     2018-07-10 11:04:08   NULL
67    6     8   3     2018-07-10 11:04:13   NULL
68    6     9   3     2018-07-10 11:04:21   NULL

注意: fecha_accion 它是一个时间戳。

我想用触发器更新前面的行,但我不能,有什么想法吗?

扳机:

DROP TRIGGER IF EXISTS vtas_historial_acciones_BEFORE_INSERT;

DELIMITER //
CREATE TRIGGER `vtas_historial_acciones_BEFORE_INSERT` BEFORE INSERT ON vtas_historial_acciones 
FOR EACH ROW
BEGIN

    SET @id = (select id from vtas_historial_acciones where id_pp = new.id_pp order by id desc limit 1);
    SET @fecha = (select fecha_accion from vtas_historial_acciones where id_pp = new.id_pp order by id desc limit 1);
    
    UPDATE vtas_historial_acciones SET  `tiempo` = TIMESTAMPDIFF(HOUR,@fecha_accion,NOW()) where id = @id;
END; //

DELIMITER ;

错误:

1442 - 无法更新存储函数/触发器中的表“vtas_historial_acciones”,因为它已被调用此存储函数/触发器的语句使用。

标签: mysqlsqltriggers

解决方案


在触发器中,您只能使用SET NEW.<column name> = value语句更改当前记录的值。但是不可能在触发器中更新另一个表的记录。

在这种情况下,我建议您按照以下步骤操作:

  1. 公开交易
  2. 用以前的值更新表
  3. 将新记录插入表中
  4. 关闭交易

推荐阅读