mirror of
https://github.com/MariaDB/server.git
synced 2025-02-07 06:12:18 +01:00
![Thirunarayanan Balathandayuthapani](/assets/img/avatar_default.png)
Don't allow the referencing key column from NULL TO NOT NULL when 1) Foreign key constraint type is ON UPDATE SET NULL 2) Foreign key constraint type is ON DELETE SET NULL 3) Foreign key constraint type is UPDATE CASCADE and referenced column declared as NULL Don't allow the referenced key column from NOT NULL to NULL when foreign key constraint type is UPDATE CASCADE and referencing key columns doesn't allow NULL values get_foreign_key_info(): InnoDB sends the information about nullability of the foreign key fields and referenced key fields. fk_check_column_changes(): Enforce the above rules for COPY algorithm innobase_check_foreign_drop_col(): Checks whether the dropped column exists in existing foreign key relation innobase_check_foreign_low() : Enforce the above rules for INPLACE algorithm dict_foreign_t::check_fk_constraint_valid(): This is used by CREATE TABLE statement to check nullability for foreign key relation.
18 lines
891 B
Text
18 lines
891 B
Text
--- foreign_null.result
|
|
+++ foreign_null,COPY.result
|
|
@@ -139,6 +139,7 @@
|
|
ALTER TABLE `t#2` DROP INDEX f1;
|
|
SET FOREIGN_KEY_CHECKS=1;
|
|
ALTER TABLE `t#1` MODIFY COLUMN f2 INT;
|
|
+ERROR HY000: Error on rename of './test/#sql-alter' to './test/t@00231' (errno: 150 "Foreign key constraint is incorrectly formed")
|
|
DROP TABLE `t#2`, `t#1`;
|
|
# Drop referenced index and modify column
|
|
CREATE TABLE `t#1`(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
|
@@ -147,6 +148,7 @@
|
|
ALTER TABLE `t#1` DROP INDEX f2;
|
|
SET FOREIGN_KEY_CHECKS=1;
|
|
ALTER TABLE `t#2` MODIFY COLUMN f1 INT NOT NULL;
|
|
+ERROR HY000: Error on rename of './test/#sql-alter' to './test/t@00232' (errno: 150 "Foreign key constraint is incorrectly formed")
|
|
DROP TABLE `t#2`, `t#1`;
|
|
# Self referential modifying column
|
|
CREATE TABLE t1(f1 INT, f2 INT, index(f2), foreign key(f1) references t1(f2) ON UPDATE CASCADE)engine=innodb;
|