MySQL术语"约束"与"外键"的区别?

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会自动创建一个名称,名称取决于实现.


Dan*_* C. 9

通常(不是必需的MySQL),外键是约束,但约束并不总是外键.考虑主键约束,唯一约束等.

回到具体问题,你是对的,省略CONSTRAINT [symbol]部分将创建一个带有自动生成名称的FK.