alb*_*ert 3 mysql foreign-key-relationship
我知道可以将主键内联声明为
CREATE TABLE `my_table` (
`id` INTEGER PRIMARY KEY
);
Run Code Online (Sandbox Code Playgroud)
我怀疑是否可以以相同的方式声明外键,例如
CREATE TABLE `my_table` (
`foreign_id` INTEGER FOREIGN KEY `other_table` (`other_table_id`)
);
Run Code Online (Sandbox Code Playgroud)
截至今天(2020 年 2 月),类似以下的代码将在 MariaDB ( 10.3.18-MariaDB-0+deb10u1)上执行得很好:
DROP SCHEMA IF EXISTS TABLE_TEST;
CREATE SCHEMA TABLE_TEST;
USE TABLE_TEST;
CREATE TABLE TABLE_TESTA(
id INT PRIMARY KEY
);
CREATE TABLE TABLE_TESTB(
fk INT REFERENCES TABLE_TESTA(id)
);
Run Code Online (Sandbox Code Playgroud)
您将使用的语法是
AttributeName AttributeType REFERENCES TableName(AttributeName)
Run Code Online (Sandbox Code Playgroud)
在CREATE声明中。
但是不会创建外键。您可以通过执行自己查看
INSERT INTO TABLE_TESTB VALUES (2);
Run Code Online (Sandbox Code Playgroud)
甚至
SHOW CREATE TABLE TABLE_TESTB;
Run Code Online (Sandbox Code Playgroud)
返回
+-------------+--------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------------+--------------------------------------------------------------------------------------------------+
| TABLE_TESTB | CREATE TABLE `TABLE_TESTB` (
`fk` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------------+--------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
因此,您可以内联“声明”一个外键,它会被解析,但不会被强制执行!
这是一个已经记录了很长时间但从未解决的错误。
| 归档时间: |
|
| 查看次数: |
1809 次 |
| 最近记录: |