Rafal, ----- Original Message ----- From: "Rafal Jank" <[EMAIL PROTECTED]> Newsgroups: mailing.database.mysql Sent: Thursday, January 09, 2003 6:18 PM Subject: Bug in foreign keys
> Hi! > I have two tables: > CREATE TABLE `pokoje` ( > `nrpok_p` char(10) NOT NULL default '', > `nip_h` int(10) NOT NULL default '0', > `lozka_p` char(2) default NULL, > `tv_p` char(1) default NULL, > `lazienka_p` char(1) default NULL, > `cena_p` int(10) default NULL, > `zaliczka_p` int(10) default NULL, > PRIMARY KEY (`nrpok_p`,`nip_h`), > KEY `nip_h_index` (`nip_h`,`nrpok_p`), > FOREIGN KEY (`nip_h`) REFERENCES `hotele` (`nip_h`) ON DELETE CASCADE > ) TYPE=InnoDB; > > CREATE TABLE `rezerwacje` ( > `id_r` int(10) NOT NULL default '0', > `pesel_k` int(11) default NULL, > `nip_h` int(10) NOT NULL default '0', > `nrpok_p` char(10) NOT NULL default '', > `data_r` date default NULL, > `od_r` date default NULL, > `do_r` date default NULL, > `cena_r` int(10) default NULL, > `zaliczka_r` int(5) default NULL, > `zaplac_r` char(1) default NULL, > `wplaczal_r` char(1) default NULL, > PRIMARY KEY (`id_r`), > KEY `nip_h_index` (`nip_h`,`nrpok_p`) > ) TYPE=InnoDB; > > Now, when I try: > alter table rezerwacje add foreign key (nip_h,nrpok_p) references > pokoje(nip_h,nrpok_p); > I get: > ERROR 1005: Can't create table './test/#sql-932_4.frm' (errno: 150) > > Why? what is your MySQL version? What is the OS? What is the default-character-set in my.cnf? What does SHOW CREATE TABLE say for every table involved, also `hotel`? Can you write a script which repeats the error? I tested a slightly more complex script in the latest MySQL-4.0 source tree, with the latin1_de charset and it ran without errors: CREATE TABLE `hotele` ( `nip_h` int(10) NOT NULL default '0', `abbaguu` int(10), PRIMARY KEY (`nip_h`) ) TYPE = InnoDB; CREATE TABLE `pokoje` ( `nrpok_p` char(10) NOT NULL default '', `nip_h` int(10) NOT NULL default '0', `lozka_p` char(2) default NULL, `tv_p` char(1) default NULL, `lazienka_p` char(1) default NULL, `cena_p` int(10) default NULL, `zaliczka_p` int(10) default NULL, PRIMARY KEY (`nrpok_p`,`nip_h`), FOREIGN KEY (`nip_h`) REFERENCES `hotele` (`nip_h`) ON DELETE CASCADE, KEY `nip_h_index` (`nip_h`,`nrpok_p`), ) TYPE=InnoDB; CREATE TABLE `rezerwacje` ( `id_r` int(10) NOT NULL default '0', `pesel_k` int(11) default NULL, `nip_h` int(10) NOT NULL default '0', `nrpok_p` char(10) NOT NULL default '', `data_r` date default NULL, `od_r` date default NULL, `do_r` date default NULL, `cena_r` int(10) default NULL, `zaliczka_r` int(5) default NULL, `zaplac_r` char(1) default NULL, `wplaczal_r` char(1) default NULL, PRIMARY KEY (`id_r`), KEY `nip_h_index` (`nip_h`,`nrpok_p`) ) TYPE=InnoDB; CREATE TABLE `kukkuu` ( `id_r` int(10) NOT NULL default '0', PRIMARY KEY (`id_r`), FOREIGN KEY (`id_r`) REFERENCES `rezerwacje` (`id_r`) ) TYPE=InnoDB; alter table rezerwacje add foreign key (nip_h,nrpok_p) references pokoje(nip_h,nrpok_p); mysql> CREATE TABLE `hotele` ( -> `nip_h` int(10) NOT NULL default '0', -> `abbaguu` int(10), -> PRIMARY KEY (`nip_h`) -> ) TYPE = InnoDB; Query OK, 0 rows affected (0.00 sec) mysql> mysql> CREATE TABLE `pokoje` ( -> `nrpok_p` char(10) NOT NULL default '', -> `nip_h` int(10) NOT NULL default '0', -> `lozka_p` char(2) default NULL, -> `tv_p` char(1) default NULL, -> `lazienka_p` char(1) default NULL, -> `cena_p` int(10) default NULL, -> `zaliczka_p` int(10) default NULL, -> PRIMARY KEY (`nrpok_p`,`nip_h`), -> FOREIGN KEY (`nip_h`) REFERENCES `hotele` (`nip_h`) ON DELETE CASCADE, -> KEY `nip_h_index` (`nip_h`,`nrpok_p`), -> ) TYPE=InnoDB; Query OK, 0 rows affected (0.00 sec) mysql> mysql> CREATE TABLE `rezerwacje` ( -> `id_r` int(10) NOT NULL default '0', -> `pesel_k` int(11) default NULL, -> `nip_h` int(10) NOT NULL default '0', -> `nrpok_p` char(10) NOT NULL default '', -> `data_r` date default NULL, -> `od_r` date default NULL, -> `do_r` date default NULL, -> `cena_r` int(10) default NULL, -> `zaliczka_r` int(5) default NULL, -> `zaplac_r` char(1) default NULL, -> `wplaczal_r` char(1) default NULL, -> PRIMARY KEY (`id_r`), -> KEY `nip_h_index` (`nip_h`,`nrpok_p`) -> ) TYPE=InnoDB; Query OK, 0 rows affected (0.00 sec) mysql> mysql> CREATE TABLE `kukkuu` ( -> `id_r` int(10) NOT NULL default '0', -> PRIMARY KEY (`id_r`), -> FOREIGN KEY (`id_r`) REFERENCES `rezerwacje` (`id_r`) -> ) TYPE=InnoDB; Query OK, 0 rows affected (0.01 sec) mysql> mysql> alter table rezerwacje add foreign key (nip_h,nrpok_p) references -> pokoje(nip_h,nrpok_p); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> > -- > _/ _/ _/_/_/ ----- Rafał Jank [EMAIL PROTECTED] ----- > _/ _/ _/ _/ _/ Wirtualna Polska SA http://www.wp.pl > _/_/_/_/ _/_/_/ ul. Traugutta 115c, 80-237 Gdansk, tel/fax. (58)5215625 > _/ _/ _/ --------==* http://szukaj.wp.pl *==---------- Best regards, Heikki Tuuri Innobase Oy --- Order technical MySQL/InnoDB support at https://order.mysql.com/ See http://www.innodb.com for the online manual and latest news on InnoDB sql query --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php