约束符号vs外键索引名称 - >有什么不同?

时间:2013-12-09 15:07:52

标签: mysql

在mysql中,外键的定义如下:

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

为什么我们需要CONSTRAINT和符号?似乎还有index_name - 所以我完全没有得到CONSTRAINT关键字的原因。有人可以澄清它的用途吗?

2 个答案:

答案 0 :(得分:5)

CONSTRAINT是告诉MySQL您希望添加约束的关键词。 [symbol]是约束的可选名称。您可以随意命名。如果省略名称,MySQL将在内部生成一个名称。

最好使用fk前缀fk_something

删除约束时需要该符号名称:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_something;

您可以使用SHOW CREATE TABLE获取符号名称:

SHOW CREATE TABLE tbl_name;

您不能使用索引名称来引用约束。发布CONSTRAINT子句时可能添加的任何索引可能会在以后自动删除(例如,如果明确添加了将在其位置提供的索引)。

MySQL Documentation中详细解答了所有这些问题。

答案 1 :(得分:0)

来自MySQL Ref文档

  

index_name表示外键ID。如果给定,则忽略此项   外键的索引是明确定义的。否则,如果   MySQL为外键创建索引,它使用index_name作为   索引名称。