--source include/have_innodb.inc --source include/not_embedded.inc --echo # --echo # Bug #18806829 OPENING INNODB TABLES WITH MANY FOREIGN KEY --echo # REFERENCES IS SLOW/CRASHES SEMAPHORE --echo # create table t1 (f1 int primary key) engine=innodb; insert into t1 values (5); insert into t1 values (2882); insert into t1 values (10); let $fk_tables = 120; --disable_query_log let $i = $fk_tables; while ($i) { eval create table fk_$i (f1 int primary key, constraint pc$i foreign key (f1) references t1(f1) on delete cascade on update cascade) engine=innodb; eval insert into fk_$i values (5); eval insert into fk_$i values (2882); eval insert into fk_$i values (10); dec $i; } --enable_query_log --source include/restart_mysqld.inc update t1 set f1 = 28 where f1 = 2882; select * from fk_120; select * from fk_1; select * from fk_50; --disable_query_log let $i = $fk_tables; while ($i) { eval drop table fk_$i; dec $i; } --enable_query_log drop table t1; --echo # --echo # Check if restrict is working fine. --echo # create table t1 (f1 int primary key) engine=innodb; let $fk_tables = 30; --disable_query_log let $i = $fk_tables; while ($i) { eval create table fk_$i (f1 int primary key, constraint pc$i foreign key (f1) references t1(f1) on delete restrict on update restrict) engine=innodb; eval insert into t1 values ($i); eval insert into fk_$i values ($i); dec $i; } --enable_query_log --source include/restart_mysqld.inc --error ER_ROW_IS_REFERENCED_2 delete from t1 where f1 = 29; select * from fk_29; --disable_query_log let $i = $fk_tables; while ($i) { eval drop table fk_$i; dec $i; } --enable_query_log drop table t1; # # MDEV-7672: Crash creating an InnoDB table with foreign keys # CREATE TABLE t1 ( id int(11) NOT NULL AUTO_INCREMENT, f1 int(11) DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT fk1 FOREIGN KEY (f1) REFERENCES t1 (id) ON DELETE CASCADE ) ENGINE=InnoDB; --error 1005 CREATE TABLE t2 ( id int(11) NOT NULL AUTO_INCREMENT, f2 int(11) NOT NULL, f3 int(11) NOT NULL, PRIMARY KEY (`id`), CONSTRAINT fk2 FOREIGN KEY (f2) REFERENCES t1 (`id`) ON DELETE CASCADE, CONSTRAINT fk3 FOREIGN KEY (f3) REFERENCES t3 (id) ON DELETE CASCADE ) ENGINE=InnoDB; show warnings; CREATE TABLE t2 ( id int(11) NOT NULL AUTO_INCREMENT, f2 int(11) NOT NULL, f3 int(11) NOT NULL, PRIMARY KEY (`id`), CONSTRAINT fk2 FOREIGN KEY (f2) REFERENCES t1 (`id`) ON DELETE CASCADE ) ENGINE=InnoDB; --error 1005 ALTER TABLE t2 ADD CONSTRAINT fk3 FOREIGN KEY (f3) REFERENCES t3 (id) ON DELETE CASCADE; show warnings; drop table t2; drop table t1; # # MDEV-9142 :Adding Constraint with no database reference # results in ERROR 1046 (3D000) at line 13: No database selected # CREATE DATABASE kg_test1; CREATE DATABASE kg_test2; CREATE TABLE `kg_test1`.`group` ( Id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `kg_test1`.`person` ( `Id` INT(11) NOT NULL AUTO_INCREMENT, `Name` VARCHAR(50) NOT NULL, PRIMARY KEY (`Id`), CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; show create table `kg_test1`.`person`; --error 1005 CREATE TABLE `kg_test2`.`person2` ( `Id` INT(11) NOT NULL AUTO_INCREMENT, `Name` VARCHAR(50) NOT NULL, PRIMARY KEY (`Id`), CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; CREATE TABLE `kg_test2`.`person2` ( `Id` INT(11) NOT NULL AUTO_INCREMENT, `Name` VARCHAR(50) NOT NULL, PRIMARY KEY (`Id`), CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `kg_test1`.`group` (`Id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; show create table `kg_test2`.`person2`; SHOW WARNINGS; DROP DATABASE kg_test2; DROP DATABASE kg_test1; # # MDEV-7627: Some symbols in table name can cause to Error Code: 1050 when created FK # CREATE TABLE `#departaments` ( `id_depart` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id_depart`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; CREATE TABLE `#departaments_tree` ( `id_depart` INT(10) UNSIGNED NOT NULL, `id_depart_in` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`id_depart`,`id_depart_in`), CONSTRAINT `#departaments_tree_ibfk_1` FOREIGN KEY (`id_depart`) REFERENCES `#departaments` (`id_depart`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; ALTER TABLE `#departaments_tree` ADD FOREIGN KEY (`id_depart_in`) REFERENCES `#departaments`(`id_depart`); SHOW CREATE TABLE `#departaments_tree`; DROP TABLE `#departaments_tree`; DROP TABLE `#departaments`; CREATE TABLE `boroda` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `a` INT(11) UNSIGNED DEFAULT NULL, `b` INT(11) UNSIGNED DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`), CONSTRAINT `boroda_ibfk_1` FOREIGN KEY (`a`) REFERENCES `boroda` (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; ALTER TABLE `boroda` ADD FOREIGN KEY (`b`) REFERENCES `boroda`(`id`); ALTER TABLE `boroda` DROP FOREIGN KEY `boroda_ibfk_2`; RENAME TABLE `boroda` TO `#boroda`; ALTER TABLE `#boroda` ADD FOREIGN KEY (`b`) REFERENCES `#boroda`(`id`); SHOW CREATE TABLE `#boroda`; DROP TABLE `#boroda`; CREATE TABLE `boroda` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `a` INT(11) UNSIGNED DEFAULT NULL, `b` INT(11) UNSIGNED DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`), CONSTRAINT `boroda_ibfk_1` FOREIGN KEY (`a`) REFERENCES `boroda` (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; RENAME TABLE `boroda` TO `bor#oda`; ALTER TABLE `bor#oda` ADD FOREIGN KEY (`b`) REFERENCES `bor#oda`(`id`); SHOW CREATE TABLE `bor#oda`; DROP TABLE `bor#oda`; --echo # --echo # MDEV-21127 Assertion `(size_t)(ptr - buf) < MAX_TEXT - 4' failed in key_text::key_text --echo # --error ER_CANT_CREATE_TABLE CREATE TABLE t1 ( a012345678901234567890123456789012345678901 char(255), b char(255), FOREIGN KEY ( a012345678901234567890123456789012345678901, b ) REFERENCES tx (ax, bx) ) ENGINE=InnoDB; --error ER_CANT_CREATE_TABLE CREATE TABLE t1 ( a012345678901234567 int, b int, c0123456789012345678 int, FOREIGN KEY (a012345678901234567,c0123456789012345678,b) REFERENCES tx (x1,x2,x3) ) ENGINE=InnoDB; --echo # --echo # MDEV-25642 InnoDB rename table copy DDL fails --echo # while dropping the table --echo # call mtr.add_suppression("InnoDB: In ALTER TABLE `test`.`t1` has or is referenced in foreign key constraints which are not compatible with the new table definition."); CREATE TABLE t1 (a VARCHAR(10) NOT NULL PRIMARY KEY) ENGINE=InnoDB; CREATE TABLE t1_fk (a VARCHAR(40), KEY a (a), FULLTEXT KEY(a), CONSTRAINT fk FOREIGN KEY(a) REFERENCES t1 (a) ON UPDATE CASCADE) ENGINE=InnoDB; ALTER TABLE t1 RENAME TO tm1, ALGORITHM=COPY; SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN; # Enable SET FOREIGN_KEY_CHECKS after fixing MDEV-25885 SET FOREIGN_KEY_CHECKS=0; CREATE TABLE t1 (c1 BIGINT NOT NULL, c2 BIGINT NOT NULL, PRIMARY KEY(c1), UNIQUE KEY(c2)) ENGINE=MEMORY; ALTER TABLE t1 ENGINE=InnoDB, ALGORITHM=COPY; DROP TABLE t1, tm1, t1_fk;