尝试更新先前插入的行时出现INSERT错误

时间:2018-09-10 14:20:34

标签: mysql sql triggers

我的桌子的结构是:

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',因为调用该存储函数/触发器的语句已使用该表。

1 个答案:

答案 0 :(得分:0)

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

在这种情况下,建议您遵循以下步骤:

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