添加外键时CONSTRAINT关键字的用途是什么?

时间:2016-06-29 08:29:21

标签: mysql foreign-keys constraints

我无法弄清楚这两者之间有什么区别。

CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES ..

FOREIGN KEY (P_Id) REFERENCES ..

它只是命名还是其他什么?

2 个答案:

答案 0 :(得分:2)

作为foreign keys indicates上的MySQL手册,约束语法的CONSTRAINT symbol_name部分是可选的:

[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION

区别在于外键的命名。如上述链接文档所述:

  

否则,MySQL会隐式创建一个根据以下规则命名的外键索引:

     

•如果已定义,则使用CONSTRAINT符号值。否则,   使用FOREIGN KEY index_name值。

     

•如果既未定义CONSTRAINT符号,也未定义FOREIGN KEY index_name,   使用的名称生成外键索引名称   引用外键列。

答案 1 :(得分:1)

使用CONSTRAINT子句,您可以为外键约束定义约束名称。如果缺少MySQL将自动生成名称。