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 |
+-------------+--------------------------------------------------------------------------------------------------+