2013-12-09 22 views
4

在MySQL外鍵的定義是這樣的:約束符號與外鍵索引名稱 - >有什麼區別?

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

我們爲什麼需要約束和符號?好像還有index_name - 所以我完全沒有得到CONSTRAINT關鍵字的原因。有人能澄清它的用途嗎?

回答

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中有更詳細的解答。

0

從MySQL參考文件

INDEX_NAME代表的外鍵ID。如果給出,如果 顯式定義了外鍵的索引,則忽略此項。否則,如果 MySQL爲外鍵創建索引,則它使用index_name作爲 索引名稱。

+0

好 - 沒錯。但是index_name不是一個約束符號。什麼是約束符號? – Dannyboy

+0

@Dannyboy,用[符號]你可以爲外鍵定義你自己的命名。省略[符號]部分將創建一個帶有自動生成名稱的FK。 – Rahul