在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关键字的原因。有人可以澄清它的用途吗?
答案 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作为 索引名称。