In het kort; ik heb een database ontwerp gemaakt en nu wil ik het gaan implementeren in MySQL. Bij het aanmaken van een nieuwe tabel krijg ik bovenstaande error (topic title).
De situatie:
Ik gebruik MySQL Server version: 3.23.49a-Max-log -->
http://www.mysql.com/Downloads/MySQL-Max-3.23/mysql-max-3.23.49a-pc-linux-gnu-i686.tar.gz
Als client gebruik ik MySQL Control Center 0.8.2 alpha -->
http://www.mysql.com/Downloads/MyCC/mycc-0.8.2-alpha-win32.zip
In een lege database voer ik de volgende SQL commando's uit:
CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id)) TYPE=INNODB;
INSERT INTO parent (id) VALUES(1);
INSERT INTO parent (id) VALUES(2);
INSERT INTO child (id,parent_id) VALUES(1,2);
INSERT INTO child (id,parent_id) VALUES(2,9); // KAN NIET > parent(9) bestaat NIET!
DELETE FROM parent WHERE id=2; // KAN NIET ? > child(1) verwijst HIERNA!
De laatste twee command's worden niet uitgevoerd omdat InnoDB er voor zorgt dat je geen records kan verwijderen die een referentie hebben in een andere tabel. Dit werkt perfect, dit moet ik hebben.
Nu probeer ik hetzelfde in maar dan net even anders:
CREATE TABLE Werknemers (
werknemerID mediumint(16) unsigned NOT NULL auto_increment,
werknemerNaam varchar(32) NOT NULL,
PRIMARY KEY (werknemerID)
) TYPE=InnoDB;
CREATE TABLE Gebruikers (
gebruikerID mediumint(16) unsigned NOT NULL auto_increment,
gebruikerNaam varchar(32) NOT NULL,
wachtwoord varchar(32) NOT NULL,
refWerknemerID mediumint(16) unsigned NOT NULL,
PRIMARY KEY (gebruikerID),
FOREIGN KEY (refWerknemerID) REFERENCES Werknemers(werknemerID)
) TYPE=InnoDB;
Het tweede commando om de tabel Gebruikers aan te maken geeft een error:
[myDataBase] ERROR 1005: Can't create table './ISvMMdb/Gebruikers.frm' (errno: 150)
Ik heb al heel wat andere SQL statements geprobeert, maar zonder resultaat. WAT ZIE IK OVER HET HOOFD?
Via de (GoT) search kon ik niet echt iets vinden. Via Google heb ik de volgende pagina gevonden:
http://dbforums.com/archive/114/2001/12/4/241880
Verder staat er in de InnoDB manual ( http://www.innodb.com/ibman.html ):
1005 ER_CANT_CREATE_TABLE Cannot create table. If the error message string refers to errno 150, then table creation fails because a foreign key constraint is not correctly formed.
Verder staan er nog wat andere zaken, maar daar krijg ik het probleem niet mee opgelost. In de MySQL manual kan ik ook geen antwoord vinden.
Ik werk nog maar zeer recent met MySQL. InnoDB heb ik vandaag voor het eerst gebruikt. Misschien dat ik morgen na nog een keer half internet door te spitten er wel uit kom. Maar dat het ene wel werkt en het andere niet, zoals hier boven, vind ik toch wel zeer opmerkelijk!
De situatie:
Ik gebruik MySQL Server version: 3.23.49a-Max-log -->
http://www.mysql.com/Downloads/MySQL-Max-3.23/mysql-max-3.23.49a-pc-linux-gnu-i686.tar.gz
Als client gebruik ik MySQL Control Center 0.8.2 alpha -->
http://www.mysql.com/Downloads/MyCC/mycc-0.8.2-alpha-win32.zip
In een lege database voer ik de volgende SQL commando's uit:
CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id)) TYPE=INNODB;
INSERT INTO parent (id) VALUES(1);
INSERT INTO parent (id) VALUES(2);
INSERT INTO child (id,parent_id) VALUES(1,2);
INSERT INTO child (id,parent_id) VALUES(2,9); // KAN NIET > parent(9) bestaat NIET!
DELETE FROM parent WHERE id=2; // KAN NIET ? > child(1) verwijst HIERNA!
De laatste twee command's worden niet uitgevoerd omdat InnoDB er voor zorgt dat je geen records kan verwijderen die een referentie hebben in een andere tabel. Dit werkt perfect, dit moet ik hebben.
Nu probeer ik hetzelfde in maar dan net even anders:
CREATE TABLE Werknemers (
werknemerID mediumint(16) unsigned NOT NULL auto_increment,
werknemerNaam varchar(32) NOT NULL,
PRIMARY KEY (werknemerID)
) TYPE=InnoDB;
CREATE TABLE Gebruikers (
gebruikerID mediumint(16) unsigned NOT NULL auto_increment,
gebruikerNaam varchar(32) NOT NULL,
wachtwoord varchar(32) NOT NULL,
refWerknemerID mediumint(16) unsigned NOT NULL,
PRIMARY KEY (gebruikerID),
FOREIGN KEY (refWerknemerID) REFERENCES Werknemers(werknemerID)
) TYPE=InnoDB;
Het tweede commando om de tabel Gebruikers aan te maken geeft een error:
[myDataBase] ERROR 1005: Can't create table './ISvMMdb/Gebruikers.frm' (errno: 150)
Ik heb al heel wat andere SQL statements geprobeert, maar zonder resultaat. WAT ZIE IK OVER HET HOOFD?
Via de (GoT) search kon ik niet echt iets vinden. Via Google heb ik de volgende pagina gevonden:
http://dbforums.com/archive/114/2001/12/4/241880
Verder staat er in de InnoDB manual ( http://www.innodb.com/ibman.html ):
1005 ER_CANT_CREATE_TABLE Cannot create table. If the error message string refers to errno 150, then table creation fails because a foreign key constraint is not correctly formed.
Verder staan er nog wat andere zaken, maar daar krijg ik het probleem niet mee opgelost. In de MySQL manual kan ik ook geen antwoord vinden.
Ik werk nog maar zeer recent met MySQL. InnoDB heb ik vandaag voor het eerst gebruikt. Misschien dat ik morgen na nog een keer half internet door te spitten er wel uit kom. Maar dat het ene wel werkt en het andere niet, zoals hier boven, vind ik toch wel zeer opmerkelijk!