mysql - 尝试更新先前插入的行时出现 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”,因为它已被调用此存储函数/触发器的语句使用。
解决方案
在触发器中,您只能使用SET NEW.<column name> = value
语句更改当前记录的值。但是不可能在触发器中更新另一个表的记录。
在这种情况下,我建议您按照以下步骤操作:
- 公开交易
- 用以前的值更新表
- 将新记录插入表中
- 关闭交易
推荐阅读
- python - Python错误:将变量组合到一行
- html - 如何编写通用 django 视图,其中一个 ListView 或 DetailView 可用于多个模型
- google-chrome-devtools - 如何关闭 Chrome 开发工具中的问题横幅?
- java - SpringBoot 中的 NullPointerException - 通过邮递员插入数据时的休眠映射
- c++ - 重载的子类函数不能调用同名的父类
- javascript - 如何暂停 HTML 音频 IF div is display: none?
- swift - 将方法(对象的函数)分配给变量或如何将参数传递给单元测试
- javascript - 如何从调用中返回响应以使用 jquery 打开 xml 文件
- javascript - Firebase 函数调用返回“NOT_FOUND”异常。(安卓,科尔廷)
- machine-learning - 使用 Keras 的自动编码器:如何获得更好的结果?