ďťż
 
Problem z kluczami obcymi [php+mysql] ďťż
 
Problem z kluczami obcymi [php+mysql]
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Problem z kluczami obcymi [php+mysql]



Marcin - 01-12-2005 20:34
Problem z kluczami obcymi [php+mysql]
  Witam,
Mam skrypt php w ktorym wysylam zapytanie do serwera mysql w celu utworzenia 2
tabel typu "innodb" z zadeklarowanym kluczem obcym w jednej tabeli:

$zapyt1="CREATE TABLE uzytkownicy (
id_user int(11) NOT NULL auto_increment,
login varchar(10),
id_dzialu int(11) REFERENCES dzial(id_dzialu),
PRIMARY KEY (id_user),
INDEX(id_dzialu)
) TYPE=InnoDB";

$zapyt2="CREATE TABLE dzialy (
id_dzialu int(11) NOT NULL auto_increment,
nazwa varchar(10),
PRIMARY KEY (id_dzialu)
) TYPE=InnoDB";

$wynik=mysql_query($zapyt1);
$wynik=mysql_query($zapyt2);

Tabele oczywiscie sie utworza ale problem polega na tym ze nie tworzy sie klucz
obcy czyli jak dodam jakis dzial a nastepnie usera a pozniej bede chcial usunac
jakis dzial to baza nie powinna mi usunac rekordu bo jest user przypisany do
tego dzialu a mimo to usuwa. Sprawdzalem w phpmyadminie jak to wyglada i
rzeczywiscie nie ma zadnego sladu ze jest jakis klucz obcy. Dopiero recznie z
poziomu phpmyadmina udalo mi sie dodac ten klucz obcy.
Jak sformulowac zapytanie mysql aby utworzyl sie ten klucz obcy?
Bede wdzieczny za podpowiedz.
Mam mysqla wesje 4.0.23

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl





Przemyslaw Popielarski - 01-12-2005 20:34

  Marcin <pieniu_designWYTNIJTO@poczta.onet.pl> wrote:
> id_dzialu int(11) REFERENCES dzial(id_dzialu),
....
> Jak sformulowac zapytanie mysql aby utworzyl sie ten klucz obcy?

Stworzyc _najpierw_ tabele dzialy, a potem usunac literowke w zacytowanej
linijce i stworzyc druga tabele.

--
../ premax
../ premax@hot,pl
../ koniec i bomba, a kto czytal ten traba. w.g.




Andrzej Kałuża - 01-12-2005 20:34

  A mnie się cosik wydaje, że aby stworzyć klucz obcy - tablica dzialy musi
istnieć ;o)

Andrzej Kałuża

Użytkownik "Przemyslaw Popielarski" <premax@hot.pl> napisał w wiadomości
news:438e4671$1@news.home.net.pl...
> Marcin <pieniu_designWYTNIJTO@poczta.onet.pl> wrote:
>> id_dzialu int(11) REFERENCES dzial(id_dzialu),
> ...
>> Jak sformulowac zapytanie mysql aby utworzyl sie ten klucz obcy?
>
> Stworzyc _najpierw_ tabele dzialy, a potem usunac literowke w zacytowanej
> linijce i stworzyc druga tabele.
>
> --
> ./ premax
> ./ premax@hot,pl
> ./ koniec i bomba, a kto czytal ten traba. w.g.
>




Radoslaw Witkowicki - 01-12-2005 20:34

  > Witam,
> Mam skrypt php w ktorym wysylam zapytanie do serwera mysql w celu
utworzenia 2
> tabel typu "innodb" z zadeklarowanym kluczem obcym w jednej tabeli:
>
> $zapyt1="CREATE TABLE uzytkownicy (
> id_user int(11) NOT NULL auto_increment,
> login varchar(10),
> id_dzialu int(11) REFERENCES dzial(id_dzialu),
> PRIMARY KEY (id_user),
> INDEX(id_dzialu)
> ) TYPE=InnoDB";
>
> $zapyt2="CREATE TABLE dzialy (
> id_dzialu int(11) NOT NULL auto_increment,
> nazwa varchar(10),
> PRIMARY KEY (id_dzialu)
> ) TYPE=InnoDB";
>
> $wynik=mysql_query($zapyt1);
> $wynik=mysql_query($zapyt2);
>
> Tabele oczywiscie sie utworza ale problem polega na tym ze nie tworzy sie
klucz
> obcy czyli jak dodam jakis dzial a nastepnie usera a pozniej bede chcial
usunac
> jakis dzial to baza nie powinna mi usunac rekordu bo jest user przypisany
do
> tego dzialu a mimo to usuwa. Sprawdzalem w phpmyadminie jak to wyglada i
> rzeczywiscie nie ma zadnego sladu ze jest jakis klucz obcy. Dopiero
recznie z
> poziomu phpmyadmina udalo mi sie dodac ten klucz obcy.
> Jak sformulowac zapytanie mysql aby utworzyl sie ten klucz obcy?
> Bede wdzieczny za podpowiedz.
> Mam mysqla wesje 4.0.23

Po piersze primo to jak bym zrobił typ tabeli ENGINE = InnoDB, a nie TYPE =
InnoDB.

A stworzenie klucza obcego wygląda np. w ten sposób:
ALTER TABLE uzytkownicy
ADD CONSTRAINT uzytkownicy_dzialy_fk
FOREIGN KEY (id_dzialu)
REFERENCES dzialy(id_dzialu);

albo inaczej

ALTER TABLE dzialy
ADD CONSTRAINT dzialy_uzytkownicy_fk
FOREIGN KEY (id_user)
REFERENCES uzytkownicy(id_user);

zależnie od tego jakie masz założenia projektowe, przydał by się jakiś model
logiczny.

Pozdro





Przemyslaw Popielarski - 02-12-2005 11:41

  Andrzej Kałuża <akaluza@kamsoft.pl> wrote:
>> Stworzyc _najpierw_ tabele dzialy, a potem usunac literowke w
>> zacytowanej linijce i stworzyc druga tabele.
>
> A mnie się cosik wydaje, że aby stworzyć klucz obcy - tablica dzialy
> musi istnieć ;o)

Gdybys cytowal po ludzku, co wymusiloby czytanie przed odpowiadaniem, to bys
wiedzial, ze dokladnie to samo napisalem...

--
../ premax
../ premax@hot,pl
../ koniec i bomba, a kto czytal ten traba. w.g.




Przemyslaw Popielarski - 02-12-2005 11:41

  Radoslaw Witkowicki <R.Witkowicki@willow.iie.uz.zgora.pl> wrote:
> Po piersze primo to jak bym zrobił typ tabeli ENGINE = InnoDB, a nie
> TYPE = InnoDB.

Obecnie nie ma to znaczenia.

--
../ premax
../ premax@hot,pl
../ koniec i bomba, a kto czytal ten traba. w.g.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • kfia-tek.keep.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com