Avatar billede aske2 Nybegynder
06. november 2002 - 18:08 Der er 8 kommentarer og
1 løsning

Fremmednøgler i MySQL

Jeg har oprettet nogle tabeller i MySQL med phpMyAdmin. Tabellerne er oprettet som InnoDB og derudover har jeg oprettet tabellen pma_relation. Mine tabeller skal relateres ved hjælp af fremmednøgler, men jeg kan ikke finde ud af det. Er der mon nogen, der kan hjælpe mig? Jeg synes at have læst et sted, at man skal indexere for at kunne bruge fremmednøgler - er det rigtigt? Hvis - hvordan gør jeg det? Og hvorfor?
Avatar billede aske2 Nybegynder
07. november 2002 - 07:44 #1
Er der slet ikke nogen, der vil hjælpe en nybegynder med det her spørgsmål. Flere point? Så sig til.
Avatar billede kennie_nm Nybegynder
07. november 2002 - 10:16 #2
MySQL understøtter ikke fremmednøgler. Det er bl.a. derfor det er så hurtigt.
Avatar billede aske2 Nybegynder
07. november 2002 - 13:55 #3
MySQL understøtter fremmednøgler fra version 3.23.44 og op. Se eventuelt http://www.mysql.com/doc/en/SEC447.html
Avatar billede kennie_nm Nybegynder
07. november 2002 - 13:59 #4
det var også på tide... :)
Avatar billede flse Nybegynder
07. november 2002 - 17:36 #5
For at kunne benytte fremmednøgler i MySQL, skal du benytte INNODB som tabel-format istedet for MyISAM, som er default formattet.
Ulempen er at INNODB er langsommere end MyISAM, men understøtter til  gengæld både transaktioner og fremmednøgler.
Avatar billede aske2 Nybegynder
08. november 2002 - 10:53 #6
flse>>
Jeg har oprettet tabellerne som InnoDb, men det jeg ikke har styr på er det med indexeringen ved brug af fremmednøgler.
Avatar billede flse Nybegynder
08. november 2002 - 11:31 #7
aske2>

Uanset om vi taler om MySQL eller en hvilken som helst anden database, bør der altid være unikke index på primærnøgler (hvilket MySQL laver automatisk når du definere den primare nøgle - indekset hedder PRIMARY).

Derudover bør du lave et tilsvarende indeks på fremmednøglen. Husk at datatypen for fremmednøglen SKAL være præcis samme størrelse som på primærnøglen, såfremt du ønsker at MySQL skal performe ordentligt.

F.eks.

CREATE TABLE main_table(
  main_id INT(10) UNSIGNED NOT NULL,
  field0 TINYINT NOT NULL,
  field1 TEXT,
  PRIMARY KEY (main_id)
} TYPE=INNODB;


CREATE TABLE sub_table(
  sub_id INT(10) UNSIGNED NOT NULL,
  main_id INT(10) UNSIGNED NOT NULL REFERENCES main_table(main_id),
  field2 TINYINT NOT NULL,
  field3 TEXT,
  PRIMARY KEY (sub_id),
  KEY main_key (main_id)
} TYPE=INNODB;
Avatar billede aske2 Nybegynder
08. november 2002 - 12:11 #8
flse>>
Tusind tak for det - det var vel nok dejligt endelig at få det på plads :-)
Det besvarer faktisk mit spørgsmål: http://www.eksperten.dk/spm/280745
så kan du ikke lige smide svaret derover? Så kan du få point der.
Lige et ekstra spørgsmål - din linie: KEY main_key (main_id) den er det samme som at skrive fx INDEX statusid_index (statusid) ikk?
Avatar billede flse Nybegynder
08. november 2002 - 12:33 #9
Jow, jeg ville mene at det giver samme resultat
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester