/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL InnoDB foreign key problem
Fra : Morten


Dato : 19-12-04 22:44


Hej. Jeg prøver at oprette flg. 2 tabeller i MySQL 4.0.22, men det
fejler med en errno 150. Nogen der kan se hvorfor?

CREATE TABLE categories (
id int(11) unsigned NOT NULL auto_increment,
name varchar(64) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY name (name)
) TYPE=InnoDB;

CREATE TABLE types (
id int(11) unsigned NOT NULL auto_increment,
category_id int(11) unsigned NOT NULL,
name varchar(64) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (category_id) REFERENCES categories(id)
) TYPE=InnoDB;


Morten

 
 
Peter Brodersen (19-12-2004)
Kommentar
Fra : Peter Brodersen


Dato : 19-12-04 22:55

On Sun, 19 Dec 2004 22:44:28 +0100, Morten <usenet@kikobu.com> wrote:

>Hej. Jeg prøver at oprette flg. 2 tabeller i MySQL 4.0.22, men det
>fejler med en errno 150. Nogen der kan se hvorfor?

$ perror 150
MySQL error: 150 = Foreign key constraint is incorrectly formed

Her virker det dog fint under 5.0.3-alpha (med InnoDB), og fejlen
optræder heller ikke på en 4.1.7 (uden InnoDB, hvor tabellerne dog
bare bliver ændret til MyISAM med et par warnings og således uden
constraints)

--
- Peter Brodersen

Jan Bachman (20-12-2004)
Kommentar
Fra : Jan Bachman


Dato : 20-12-04 08:47

>Hej. Jeg prøver at oprette flg. 2 tabeller i MySQL 4.0.22, men det
>fejler med en errno 150. Nogen der kan se hvorfor?

Som jeg husker det, skal du lægge index på alle foreign key felter.
Dvs. læg index på types.category_id.

/Jan

Morten (20-12-2004)
Kommentar
Fra : Morten


Dato : 20-12-04 19:09

Jan Bachman wrote:
>>Hej. Jeg prøver at oprette flg. 2 tabeller i MySQL 4.0.22, men det
>>fejler med en errno 150. Nogen der kan se hvorfor?
>
>
> Som jeg husker det, skal du lægge index på alle foreign key felter.
> Dvs. læg index på types.category_id.
>

Du har helt ret. Mange tak. Den rigtige løsning er således:

CREATE TABLE categories (
id int(11) unsigned NOT NULL auto_increment,
name varchar(64) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY name (name)
) TYPE=InnoDB;

CREATE TABLE types (
id int(11) unsigned NOT NULL auto_increment,
category_id int(11) unsigned NOT NULL,
name varchar(64) NOT NULL,
PRIMARY KEY (id),
INDEX (category_id),
FOREIGN KEY (category_id) REFERENCES categories(id)
) TYPE=InnoDB;

Mvh.

Morten

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408195
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste