2015-10-28 4 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 Error (1442) Не удается обновить table 'product' в хранении function/trigger, потому что он уже используется оператором, который вызывается этой хранимой функцией/триггером. */

Я создал две таблицы и два триггера, как:

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

Смежные вопросы