[Mysql] primary & foreign key
Ania - 27-10-2005 23:57
[Mysql] primary & foreign key
Witam,
Mam problem z utworzeniem tabeli z 1 zlożonym kluczem podstawowym i dwoma obcymi w mysql. Udało mi się np. utworzyć tabelkę w ten sposób (1 primary key i 1 foreign key): mysql> CREATE TABLE Zamowienia (zam_numer INTEGER NOT NULL PRIMARY KEY, zam_data DATETIME NOT NULL, kl_id CHAR(10) NOT NULL, INDEX(kl_id), FOREIGN KEY (kl_id) REFERENCES Klienci (kl_id) ON UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB;
a nie mogę utworzyć tabeli (2 foreign key i 1 złożony primary key): mysql> CREATE TABLE ElementyZamowienia (zam_number INTEGER NOT NULL, zam_element INTEGER NOT NULL, prod_id CHAR(10) NOT NULL, ilosc INTEGER NOT NULL, cena_elem DECIMAL(8,2) NOT NULL, INDEX(zam_number), FOREIGN KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB;
Tabele Klienci, Produkty, Zamowienia są typu INNODB.
show innodb status pokazuje: ------------------------ LATEST FOREIGN KEY ERROR ------------------------ 051027 16:34:57 Error in foreign key constraint of table `sqloko/ElementyZamowienia`: FOREIGN KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB: Cannot resolve column name close to: ) ON UPDATE CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB
Co robię źle? Jak poprawnie utworzyć taką tabelę?
pozdrawiam Ania
-- "Hello," he lied. -- Don Carpenter, quoting a Hollywood agent
artiun - 27-10-2005 23:57
Ania napisał(a): > Witam, > > Mam problem z utworzeniem tabeli z 1 zlożonym kluczem podstawowym i > dwoma obcymi w mysql. > Udało mi się np. utworzyć tabelkę w ten sposób (1 primary key i 1 > foreign key): > mysql> CREATE TABLE Zamowienia (zam_numer INTEGER NOT NULL PRIMARY KEY, > zam_data DATETIME NOT NULL, kl_id CHAR(10) NOT NULL, INDEX(kl_id), > FOREIGN KEY (kl_id) REFERENCES Klienci (kl_id) ON UPDATE CASCADE ON > DELETE RESTRICT) TYPE=INNODB; > > a nie mogę utworzyć tabeli (2 foreign key i 1 złożony primary key): > mysql> CREATE TABLE ElementyZamowienia (zam_number INTEGER NOT NULL, > zam_element INTEGER NOT NULL, prod_id CHAR(10) NOT NULL, ilosc INTEGER > NOT NULL, cena_elem DECIMAL(8,2) NOT NULL, INDEX(zam_number), FOREIGN > KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE CASCADE ON > DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), INDEX(prod_id), > FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON UPDATE CASCADE ON > DELETE RESTRICT) TYPE=INNODB; > > Tabele Klienci, Produkty, Zamowienia są typu INNODB. > > show innodb status pokazuje: > ------------------------ > LATEST FOREIGN KEY ERROR > ------------------------ > 051027 16:34:57 Error in foreign key constraint of table > `sqloko/ElementyZamowienia`: > FOREIGN KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE masz > CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), > INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON Czy zam_element to to samo co prod_id? raczej id pozycji (produkt się może powtórzyć) i pewnie tu siadło Klient bierze np. 5l farby (iałej - emalii), a potem domawia tę samą farbę w ilości 2l (białej emalii, nie tej wodnej, która obok stała) - to siada. Sumuje się na fakturze ( winnym wypadku 2 na fakturze). > UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB: > Cannot resolve column name close to: > ) ON UPDATE CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, > zam_element), INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES a po co > Produkty(prod_id) ON UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB pogubione.. -- Artur
Ania - 27-10-2005 23:57
[pl.comp.bazy-danych] On Thu, 27 Oct 2005 16:52:51 +0200, artiun <artiun@wp.pl> wrote: >> a nie mogę utworzyć tabeli (2 foreign key i 1 złożony primary key): >> mysql> CREATE TABLE ElementyZamowienia (zam_number INTEGER NOT NULL, >> zam_element INTEGER NOT NULL, prod_id CHAR(10) NOT NULL, ilosc INTEGER >> NOT NULL, cena_elem DECIMAL(8,2) NOT NULL, INDEX(zam_number), FOREIGN >> KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE CASCADE ON >> DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), INDEX(prod_id), >> FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON UPDATE CASCADE ON >> DELETE RESTRICT) TYPE=INNODB; >> >> Tabele Klienci, Produkty, Zamowienia są typu INNODB. >> >> show innodb status pokazuje: >> ------------------------ >> LATEST FOREIGN KEY ERROR >> ------------------------ >> 051027 16:34:57 Error in foreign key constraint of table >> `sqloko/ElementyZamowienia`: >> FOREIGN KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE > masz >> CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), >> INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON > Czy zam_element to to samo co prod_id?
To nie to samo, zam_element zależny jest od liczby produktów w zamówieniu, np 3 produkty, zamówienie 1 - PRI (11, 12, 13).
> raczej id pozycji (produkt się może powtórzyć) i pewnie tu siadło > Klient bierze np. 5l farby (iałej - emalii), a potem domawia tę samą farbę w > ilości 2l (białej emalii, nie tej wodnej, która obok stała) - to siada. > Sumuje się na fakturze ( winnym wypadku 2 na fakturze). >> UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB: >> Cannot resolve column name close to: >> ) ON UPDATE CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, >> zam_element), INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES > a po co >> Produkty(prod_id) ON UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB > pogubione..
Teraz widzę, że ze mało informacji podałam: Tabela Zamowienia - primary key: zam_number Tabela Produkty - primary key: prod_id Tabela ElementyZamowienia - primary key (zam_number, zam_element)
pozdrawiam Ania
-- Odets, where is thy sting? -- George S. Kaufman
artiun - 27-10-2005 23:58
Ania napisał(a): > Teraz widzę, że ze mało informacji podałam: > Tabela Zamowienia - primary key: zam_number > Tabela Produkty - primary key: prod_id > Tabela ElementyZamowienia - primary key (zam_number, zam_element) A. > Tabela Produkty - primary key: prod_id B. > Tabela ElementyZamowienia - primary key (zam_number, zam_element)
To może tak: A - to miejsce skąd brane (prod_id) na pozycje: Tabela ElementyZamowienia (dokładnie na pole: zam_element *czyli lp i id - nie wiem jak za jednym razem - przeczytaj - na stanowsku roboczym 2x biorę ten sam towar, rozmyśliłem się zamiast litra biorę 2, zrobisz sobie zapytanie (z gruntu złe) i wyjdzie Ci litr, Ty się nie sprzeczaj popraw założenia). To wybacz, ten kto to zobaczy, kiedy Ty się zwolnisz będzie na Tobie psy wieszał.
-- Artur
Ania - 27-10-2005 23:58
[pl.comp.bazy-danych] On Thu, 27 Oct 2005 18:07:21 +0200, artiun <artiun@wp.pl> wrote: > To może tak: A - to miejsce skąd brane (prod_id) na pozycje: Tabela > ElementyZamowienia (dokładnie na pole: zam_element *czyli lp i id - nie wiem > jak za jednym razem - przeczytaj - na stanowsku roboczym 2x biorę ten sam > towar, rozmyśliłem się zamiast litra biorę 2, zrobisz sobie zapytanie (z > gruntu złe) i wyjdzie Ci litr, Ty się nie sprzeczaj popraw założenia). To > wybacz, ten kto to zobaczy, kiedy Ty się zwolnisz będzie na Tobie psy wieszał.
Genaralnie dzięki za pomoc i za zainteresowanie, ale to nie baza produkcyjna, ale do przetestowania przykładów z książki, które zrobione są na tej bazie. Testowałam to trochę i okazało się, że zapytanie było od początku dobre, tyle że zrobiłam literówkę. :) zam_number zamiast zam_numer :)
pozdrawiam Ania
-- What does education often do? It makes a straight cut ditch of a free meandering brook. -- Henry David Thoreau
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.plchinska-zupka.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|