MYSQL:如何内联声明外键?

MYSQL:如何内联声明外键?,mysql,foreign-key-relationship,Mysql,Foreign Key Relationship,我知道可以将主键内联声明为 CREATE TABLE `my_table` ( `id` INTEGER PRIMARY KEY ); 我的疑问是,是否有可能以同样的方式声明外键,比如 CREATE TABLE `my_table` ( `foreign_id` INTEGER FOREIGN KEY `other_table` (`other_table_id`) ); 从: MySQL不识别或支持“内联引用规范”(如SQL标准中所定义),其中引用被定义为列规范的一部分。My

我知道可以将主键内联声明为

CREATE TABLE `my_table` (
    `id` INTEGER PRIMARY KEY
);
我的疑问是,是否有可能以同样的方式声明外键,比如

CREATE TABLE `my_table` (
   `foreign_id` INTEGER FOREIGN KEY `other_table` (`other_table_id`)
);
从:

MySQL不识别或支持“内联引用规范”(如SQL标准中所定义),其中引用被定义为列规范的一部分。MySQL仅在作为单独外键规范的一部分指定时才接受REFERENCES子句

从今天(2020年2月)起,类似以下代码将在MariaDB上正常执行(
10.3.18-MariaDB-0+deb10u1
):

您将使用的语法是

AttributeName AttributeType REFERENCES TableName(AttributeName)
CREATE
语句中

但不会创建外键。 您可以通过执行

INSERT INTO TABLE_TESTB VALUES (2);
甚至

SHOW CREATE TABLE TABLE_TESTB;
返回

+-------------+--------------------------------------------------------------------------------------------------+
| Table       | Create Table                                                                                     |
+-------------+--------------------------------------------------------------------------------------------------+
| TABLE_TESTB | CREATE TABLE `TABLE_TESTB` (
  `fk` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------------+--------------------------------------------------------------------------------------------------+
因此,您可以内联“声明”外键,它将被解析,但不会强制执行


这已经有很长一段时间的记录了,但从未解决过。

是什么阻止了你简单地阅读?你需要的一切都在那里。有趣的是,他们坚持
CREATE TABLE
语法的标准,但在语义方面却不支持。我相信你的答案已经过时了。我甚至在你链接的文档中找不到你的报价。
SHOW CREATE TABLE TABLE_TESTB;
+-------------+--------------------------------------------------------------------------------------------------+
| Table       | Create Table                                                                                     |
+-------------+--------------------------------------------------------------------------------------------------+
| TABLE_TESTB | CREATE TABLE `TABLE_TESTB` (
  `fk` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------------+--------------------------------------------------------------------------------------------------+