diff options
Diffstat (limited to 'mysql-test/suite/innodb/t/innodb-fk.test')
-rw-r--r-- | mysql-test/suite/innodb/t/innodb-fk.test | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/t/innodb-fk.test b/mysql-test/suite/innodb/t/innodb-fk.test new file mode 100644 index 00000000..6d5307a1 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-fk.test @@ -0,0 +1,262 @@ +--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; |