[mysql] problem z triggerem

0

Witam !!!

Prubuje napisać trigger w mysqlu, który będzie automatycznie dodawał rekordy do tabeli, zaraz po tym jak w innej tabeli pojawi sie nowy rekord. Mam dwie tabele :

Create table Produkt (
    id_produkt Int NOT NULL AUTO_INCREMENT,
    nazwa Varchar(50) NOT NULL,
    model Varchar(20),
    cena_netto Varchar(15) NOT NULL,
    VAT Varchar(3) NOT NULL,
    UNIQUE (id_produkt),
Primary Key (id_produkt)) ENGINE = MyISAM;

oraz tabele :

Create table Towar (
    id_towar Int NOT NULL AUTO_INCREMENT,
    ilosc Int NOT NULL,
    id_produkt Int NOT NULL,
    UNIQUE (id_towar),
Primary Key (id_towar,id_produkt)) ENGINE = MyISAM;

Tabela produkt opisuje jakąś rzecz, która jest sprzedawana a tabela towar mówi ile tego towaru jest na stanie magazynowym.

Teraz chciałbym napisać trigger, który by dodawał do tabeli towar nowy pordukt w ilości zero ponieważ jeszcze nie ma na ten pordukt żadnych faktur. Probowałem napisać go sam w postaci :

create trigger DodajProdukt after insert on produkt
for each row begin
insert into towar values(0,0, New.id_produkt);
end;

jednak ten nie jest poprawny. Proszę pomożcie mi poprawnie napisać ten trigger.
Z góry wielkie thx

0

Pole id_towar jest (powinno być) kluczem głównym i autoincrement więc:insert into towar (ilosc, id_produkt) values(0, New.id_produkt);

Dlaczego do klucza głównego w tabeli Towar dodałeś id_produkt?

Nie lepiej umieścić w tabeli Produkt kolumnę ilość zamiast skazywać się na triggery i niepotrzebne złączenia?

Pozostając przy obecnej strukturze nie musisz stosować triggera. Wystarczy FULL OUTER JOIN w zapytaniu o produkt i jego ilość.

0

Sprawa #1 to trigger w postaci

create trigger DodajProdukt after insert on produkt
for each row
begin
insert into sklep.towar (ilosc, id_produkt) values(0, New.id_produkt)
end;

nie działa i nie bardzo wiem jak mam napisać go żeby działał :(

#2 masz rację mogę umieścić w tabeli produkt pole ilosc i pewnie będzie to lepiej działało ale trigger i tak będzie mi potrzebny bo chce zautomatyzować zwiększanie się i zmniejszanie się ilości towaru względem faktur które pojawiają się w systemie. Teraz mam takie coś:

Create table Produkt (
	id_produkt Int NOT NULL AUTO_INCREMENT,
	nazwa Varchar(50) NOT NULL,
	model Varchar(20),
	cena_netto Varchar(15) NOT NULL,
	VAT Varchar(3) NOT NULL,
	UNIQUE (id_produkt),
 Primary Key (id_produkt)) ENGINE = MyISAM;

Create table nag_fak (
	id_nf Int NOT NULL,
	id_osoba_K Int NOT NULL,
	id_osoba_S Int NOT NULL,
	numer Char(20) NOT NULL,
	rodzaj Varchar(10),
	data Date NOT NULL,
	UNIQUE (id_nf),
 Primary Key (id_nf,id_osoba_K,id_osoba_S)) ENGINE = MyISAM;

Create table poz_fak (
	id_pk Int NOT NULL,
	id_nf Int NOT NULL,
	id_produkt Int NOT NULL,
	ilosc Int NOT NULL,
	UNIQUE (id_pk),
 Primary Key (id_pk,id_nf,id_produkt)) ENGINE = MyISAM;

tabela nag_fak to nagłówek faktury. Przechowywane są tu informację o tym kto sprzedaje i kto kupuje numer i rodzaj faktury oraz data. Tabela poz_fak przechowuje informacje o pozycjach jakie występują na fakturze.
Teraz jak dodam pole ilosc do tabeli produkt to jak napisać trigger który będzie zmniejszał ilosc kiedy pojawi się nowa pozycja faktury, pod warunkiem ze w polu id_osoba_S ( osoba sprzedająca ) = 0 i id_osoba_K ( osoba kupująca ) różny od 0 ???
Jeśli ktoś wie proszę nich pomoże :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1