mariadb中创建外键时的一个奇怪的情况

在建表语句中,将参照的定义放到对应的属性后面,类似于这样:

create table tbl2 (id int references tbl1(id));

发现并没有成功创建外键。

而将参照的定义放到所有属性后面,类似于这样:

create table tbl2 (id int,foreign key id references tbl1(id));

可以成功创建外键。

仔细看了一下语法的定义,第一种用法是符合其语法定义的。

找了一下,没找到相关问题的说明,然后准备提交bug了。

在mariadb的jira中发现已经有人提交bug了。

相关jira页面:https://jira.mariadb.org/browse/MDEV-7546?jql=text%20~%20%22foreign%20key%22

在下面已经有人评论,并给出了MySQL的一个链接:https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

看起来MySQL也存在这样的问题,而且还是故意的。

这么明显的问题,mariadb的手册中应该也会提到才对,于是继续翻看mariadb的手册,果然找到了,链接如下:

https://mariadb.com/kb/en/mariadb/foreign-keys/

里面提到这么一句:

MariaDB accepts the REFERENCES clause in ALTER TABLE and CREATE TABLE statements, but that syntax does nothing. MariaDB simply parses it without returning any error or warning, for compatibility with other DBMS's.

也是故意的。

各家DBMS使用的SQL都有一些自己的特点,各自使用的SQL只能说大致相同,要是涉及到内置函数之类的,只能分别去查各自的手册了。

写这些内容只是为了记录这个奇怪的现象。

原文地址:https://www.cnblogs.com/vanwoos/p/6872543.html