【发布时间】:2020-12-22 22:40:20
【问题描述】:
在从 MySQL(用于代码生成器)检索外键信息时,我注意到了这种奇怪的行为。它看起来像是 MySQL 8.x 中的一个主要错误。当我使用REFERENCES 创建外键时,引擎不会强制执行它。例如:
create table p (
id int primary key not null
) engine=innodb;
create table q (
pid int references p (id)
) engine=innodb;
insert into q (pid) values (123); -- succeeds (!)
参见DB Fiddle 的示例。
但是,如果我创建输入 FOREIGN KEY (col) REFERENCES table (col) 的外键,它可以正常工作:
create table p (
id int primary key not null
) engine=innodb;
create table r (
pid int,
foreign key (pid) references p (id)
) engine=innodb;
insert into r (pid) values (456); -- fails, as expected
在DB Fiddle查看运行示例。
如果这是 MySQL 中真正的主要错误,是否有任何方法可以禁用错误的语法?
注意:我刚刚验证 MariaDB 在 10.4 之前存在相同的错误,但它似乎已在 10.5 中修复。
【问题讨论】:
标签: mysql sql foreign-keys mariadb