|
| 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
| |
|
|