On Thu, 09 Jan 2003 23:41:46 +0200 Heikki Tuuri <[EMAIL PROTECTED]> wrote:
> Rafal, > > I tested also with the `hotele`, and it worked ok. > > Please provide your my.cnf and MySQL version number. And test if you can > repeat the error. > > Regards, > > Heikki > MySQL version 4.0.8, my my.cnf is as follows: # Example mysql config file for medium systems. # # This is for a system with little memory (32M - 64M) where MySQL plays # a important part and systems up to 128M very MySQL is used together with # other programs (like a web server) # # You can copy this file to # /etc/mf.cnf to set global options, # mysql-data-dir/my.cnf to set server-specific options (in this # installation this directory is /var/lib/mysql) or # ~/.my.cnf to set user-specific options. # # One can in this file use all long options that the program supports. # If you want to know which options a program support, run the program # with --help option. # The following options will be passed to all MySQL clients [client] #password = your_password port = 3306 socket = /var/lib/mysql/mysql.sock # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock skip-locking set-variable = key_buffer=16M set-variable = max_allowed_packet=1M set-variable = table_cache=64 set-variable = sort_buffer=512K set-variable = net_buffer_length=8K set-variable = myisam_sort_buffer_size=8M #set-variable = max_user_connections =2 log-bin server-id = 1 default-character-set = latin2 # Point the following paths to different dedicated disks #tmpdir = /tmp/ #log-update = /path-to-dedicated-directory/hostname # Uncomment the following if you are using BDB tables #set-variable = bdb_cache_size=4M #set-variable = bdb_max_lock=10000 # Uncomment the following if you are using Innobase tables innodb_data_file_path = ibdata1:25M;ibdata2:37M;ibdata3:100M:autoextend innodb_data_home_dir = /var/lib/mysql/ innodb_log_group_home_dir = /var/lib/mysql/ innodb_log_arch_dir = /var/lib/mysql/ set-variable = innodb_mirrored_log_groups=1 set-variable = innodb_log_files_in_group=3 set-variable = innodb_log_file_size=5M set-variable = innodb_log_buffer_size=8M innodb_flush_log_at_trx_commit=1 innodb_log_archive=0 set-variable = innodb_buffer_pool_size=16M set-variable = innodb_additional_mem_pool_size=2M set-variable = innodb_file_io_threads=4 set-variable = innodb_lock_wait_timeout=50 [mysqldump] quick set-variable = max_allowed_packet=16M [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates and the test case: mysql> drop table pokoje,rezerwacje,hotele; Query OK, 0 rows affected (1.13 sec) mysql> create table hotele ( -> nip_h int(10) not null, -> nazwa_h varchar(100) not null, -> miasto_h varchar(50) not null, -> kodpocz_h int(5) not null, -> adres_h varchar(50), -> email_h varchar(50), -> kontobank_h int(32), -> wyprzedaz_h varchar(10), -> standard_h varchar(20), -> opis_h varchar(200), -> primary key (nip_h) -> ) -> type=innodb; Query OK, 0 rows affected (0.17 sec) mysql> create table pokoje ( -> nrpok_p char(10) not null, -> nip_h int(10) not null, -> lozka_p char(2), -> tv_p char(1), -> lazienka_p char(1), -> cena_p int(10), -> zaliczka_p int(10), -> index nip_h_index (nip_h,nrpok_p), -> foreign key (nip_h) references hotele (nip_h) on delete cascade, -> primary key (nrpok_p, nip_h) -> ) -> type=innodb; Query OK, 0 rows affected (0.21 sec) mysql> create table rezerwacje ( -> id_r int(10) not null, -> pesel_k int(11), -> nip_h int(10) not null, -> nrpok_p char(10) not null, -> data_r date, -> od_r date, -> do_r date, -> cena_r int(10), -> zaliczka_r int(5), -> zaplac_r char(1), -> wplaczal_r char(1), -> index nip_h_index (nip_h,nrpok_p), -> foreign key(nip_h,nrpok_p) references pokoje(nip_h,nrpok_p) on delete se t null, -> index pesel_k_index (pesel_k), -> primary key(id_r)) type=innodb; ERROR 1005: Can't create table './test/rezerwacje.frm' (errno: 150) > > Welcome to the MySQL monitor. Commands end with ; or \g. > Your MySQL connection id is 1 to server version: 4.0.8-gamma-standard-log > > Type 'help;' or '\h' for help. Type '\c' to clear the buffer. > > mysql> drop database test; > Query OK, 0 rows affected (0.08 sec) > > mysql> create database test; > Query OK, 1 row affected (0.00 sec) > > mysql> CREATE TABLE `hotele` ( > -> `nip_h` int(10) NOT NULL default '0', > -> `nazwa_h` varchar(100) NOT NULL default '', > -> `miasto_h` varchar(50) NOT NULL default '', > -> `kodpocz_h` int(5) NOT NULL default '0', > -> `adres_h` varchar(50) default NULL, > -> `email_h` varchar(50) default NULL, > -> `kontobank_h` int(32) default NULL, > -> `wyprzedaz_h` varchar(10) default NULL, > -> `standard_h` varchar(20) default NULL, > -> `opis_h` varchar(200) default NULL, > -> 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.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 > > ----- Original Message ----- > From: "Heikki Tuuri" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Thursday, January 09, 2003 11:04 PM > Subject: Re: Bug in foreign keys > > > > 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 > -- _/ _/ _/_/_/ ----- 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 *==---------- --------------------------------------------------------------------- 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