Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL 8.x中的主要错误?--外键_Mysql_Sql_Foreign Keys_Mariadb - Fatal编程技术网

MySQL 8.x中的主要错误?--外键

MySQL 8.x中的主要错误?--外键,mysql,sql,foreign-keys,mariadb,Mysql,Sql,Foreign Keys,Mariadb,在从MySQL(用于代码生成器)检索外键信息时,我注意到了这种奇怪的行为。它看起来像是MySQL 8.x中的一个主要错误。当我使用引用创建外键时引擎不会强制执行它。例如: 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); --

在从MySQL(用于代码生成器)检索外键信息时,我注意到了这种奇怪的行为。它看起来像是MySQL 8.x中的一个主要错误。当我使用
引用创建外键时
引擎不会强制执行它。例如:

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 (!)
参见第页的示例

但是,如果我创建外键输入
外键(col)引用表(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
请参阅上的运行示例

如果这确实是MySQL中的一个主要错误,那么有没有办法禁用错误语法


注意:我刚刚验证了MariaDB在10.4之前出现了相同的bug,但它似乎在10.5中得到了修复。

在MySQL中没有修复。它允许合法的SQL语法,但MySQL在使用列级外键语法时不保存约束

这在2005年被报告为一个bug,并以“不会修复”消息结束

说:

MySQL解析但忽略“内联引用规范”(在SQL标准中定义),其中引用被定义为列规范的一部分。MySQL仅在作为单独外键规范的一部分指定时才接受REFERENCES子句。对于不支持外键的存储引擎(如MyISAM),MySQL服务器解析并忽略外键规范


无法禁用不受支持的语法,甚至无法使其返回错误或警告。

Wow。我的意思是,也许对于2005年的标准来说,这是可以的,但现在我(个人)希望这样的东西会消失。谢谢你的信息。好吧,至少MariaDB的人已经注意到了。我一直认为这种行为,接受语法,但忽略强制约束,不返回警告,是MySQL最糟糕的特性之一。我以前给过他们关于这方面的反馈。但我理解为什么可插拔存储引擎体系结构使其难以修复。