45 mysql ddl constraints foreign-keys
我在这里查看MySQL文档并试图理清FOREIGN KEY和CONSTRAINT之间的区别.我认为FK 是一种约束,但是文档似乎在谈论它们,就像它们是分开的东西一样.
创建FK的语法是(部分)......
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
Run Code Online (Sandbox Code Playgroud)
所以"CONSTRAINT"子句是可选的.你为什么要包括它或不包括它?如果你把它留下来,MySQL会创建一个外键但不是约束吗?或者它更像是一个"CONSTRAINT"只不过是你FK的名字,所以如果你没有指定它,你会得到一个匿名的FK?
任何澄清将不胜感激.
谢谢,
阮经天
Bil*_*win 58
是的,外键是一种约束.MySQL对约束的支持不均衡:
PRIMARY KEY
:yes表格约束和列约束.FOREIGN KEY
:yes表约束,但仅限于InnoDB和BDB存储引擎; 否则解析但忽略.CHECK
:解析但在所有存储引擎中被忽略.UNIQUE
:yes表格约束和列约束.NOT NULL
:yes作为列约束.DEFERRABLE
和其他约束属性:没有支持. 该CONSTRAINT
子句允许您显式命名约束,以使元数据更具可读性,或者在您想要删除约束时使用该名称.SQL标准要求该CONSTRAINT
子句是可选的.如果将其遗漏,RDBMS会自动创建一个名称,名称取决于实现.
通常(不是必需的MySQL),外键是约束,但约束并不总是外键.考虑主键约束,唯一约束等.
回到具体问题,你是对的,省略CONSTRAINT [symbol]部分将创建一个带有自动生成名称的FK.
归档时间: |
|
查看次数: |
28457 次 |
最近记录: |