2015-10-28 211 views
0

我在MySQL創建該觸發器(上表產品更新後):SQL錯誤(1442),任何解決方案?

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 

但是,我又得到了那個錯誤。

我真的需要在兒童價格變化時更新父母價格,你有什麼解決方案嗎?

謝謝。

+0

你究竟想要做什麼?在明確更新它之後,您希望product.price具有什麼價值? – JRD

+0

@JRD他沒有對正在插入或更新的行進行任何更改,他正在嘗試更新父級產品。 – Barmar

+0

我有一些兒童產品,我需要顯示父母產品上最便宜的兒童價格。 –

回答

0

您不能使用觸發器,因爲您需要更新正在更新的同一個表。您需要將此邏輯移入應用程序代碼或使用存儲過程而不是觸發器。

+0

其非常困難的過程,因爲有很多不同的方式來改變價格,比如(在應用程序中,從注入到SQL和...) –

+0

您沒有選擇,除非您將子女和父母價格移動到單獨的表格。 – Shadow