添加外键时CONSTRAINT关键字有什么用?

Jas*_*sir 7 mysql constraints foreign-keys

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

CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES ..
Run Code Online (Sandbox Code Playgroud)

FOREIGN KEY (P_Id) REFERENCES ..
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*dow 5

正如 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
Run Code Online (Sandbox Code Playgroud)

区别在于外键的命名。正如上面链接的文件所描述的:

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

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

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