Witam!

Mam dwie tabelki:

  • products - produkty (zawiera pole state, moze byc 0 - niekatywny i 1 - aktywny)
  • orders_products - tabelka mowi czy bylo zamowienie na dany produkt (zawiera dwa klucze obce product_id i order_id)

Napisalem trigger, ktory przed proba usuniecia produktu sprawdza czy byl on kiedys zamawiany.
Jesli byl to nie chce go usuwac tylko zmienic mu state na 0.

mysql> delimiter |
mysql> create trigger orders_products before delete on products
-> for each row begin
-> set @n = (select product_in_order(OLD.id));
-> if(@n != 0) then
-> update products set state = 0 where id = OLD.id;
-> else
-> delete from products where id = OLD.id;
-> end if;
-> end;
-> |

Przy probie usuniecia produktu, ktory ma wpis w orders_products mysql mowi mi cos takiego:

Can't update table 'products' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Mam rozumiec ze taka akcja, ktora sobie wymyslilem jest absolutnie nie mozliwa??

Inna sprawa jest powiedzenie mysql, zeby nie wykonywal zapytania, ktore wywolalo trigger. Nie da sie tego zrobic zwracajac FALSE z triggera, podobno mozna zrobic to spejalnie umieszczajac bledne zapytanie (ktos ma jakies doswiadczenie w tym temacie??).

Bede wdzeiczny za pomoc.