【发布时间】:2016-01-28 19:26:57
【问题描述】:
我在 MySQL 中创建了这个触发器(在表产品更新之后):
BEGIN
set @parentid := (select parent_id from product where product_id = new.product_id);
if (old.price <> new.price) then
update product set price=new.price where product_id = @parentid and price > new.price;
end if;
END
但是,当我更新价格时,我得到了这个错误
: SQL 错误 (1442) 无法更新存储中的表“产品” 函数/触发器,因为它已被调用的语句使用 这个存储的函数/触发器。 */
我创建了两个表和两个触发器,例如:
Trigger 1(表产品更新后):
BEGIN
if (old.price <> new.price) then
insert into product_price
(product_id, price , date_added)
values
(new.product_id, new.price, SYSDATE());
end if;
END
Trigger 2(在表上插入后product_price):
BEGIN
SET @parentid := (select parent_id from product where product_id = new.product_id);
if (@parentid >0) then
update product set price=new.price where product_id in (select @parentid);
end if;
END
但是,我又遇到了那个错误。
当子价格发生变化时,我确实需要更新父价格,您有什么解决方案吗?
谢谢。
【问题讨论】:
-
你到底想做什么?在您明确更新 product.price 后,您希望它具有什么价值?
-
@JRD 他没有对正在插入或更新的行进行任何更改,他正在尝试更新父产品。
-
我有一些子产品,我需要在父产品上显示最便宜的儿童价格。
-
@Barmar 我明白了。如果层次结构的深度超过 1 级,这似乎是一场级联的噩梦。您能否在 select 上得出最便宜的价格,而不是试图维持它?
-
@JRD 我正在尝试更改现有代码,更改所有代码以显示另一个查询是一项非常艰巨的工作,如果我可以使用类似这样的触发器,它将更安全、更容易。
标签: mysql triggers mysql-error-1442