2012-11-26 58 views
3

是否在MySQL中以下內容:差異化的添加外鍵和添加約束fk_foreign_key

alter table TABLE_A 
ADD CONSTRAINT fk_id (id) REFERENCES TABLE_B(id) 
ON DELETE CASCADE ON UPDATE CASCADE; 

一樣做

alter table TABLE_A 
ADD FOREIGN KEY (id) REFERENCES TABLE_B(id); 

但它也增加了對關係的BTREE索引?或者它們相互補充?

+0

是否第一個真正的工作?你不錯過那裏的'外鍵'關鍵字嗎?在這種情況下,區別僅在於第一個用用戶定義的名稱創建FK,否則MySQL爲該約束生成一個名稱。 –

+2

AFAICT他們是同一件事; 'CONSTRAINT'子句允許自定義名稱,否則MySQL會選擇一個唯一的鍵。儘管如此,術語'FOREIGN KEY' *是必需的。 –

+0

@Jack在MySQL5中,當我不添加FOREIGN KEY時,它仍然可以工作。這隻能算是oracle還是其他的東西? – bicycle

回答

4

兩個查詢都差不多,儘管根據manualFOREIGN KEY應該出現在兩個查詢中。

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

CONSTRAINT [symbol]的好處是,你可以命名,而不是MySQL的生成你的名字的約束;此符號在數據庫中必須是唯一的,並且可用於稍後刪除該約束。

SHOW CREATE TABLE TABLE_A; 
0

約束語法純粹是爲了命名的目的,這樣就可以使用該名稱在任何其他列實施約束:

生成的符號名可以通過創建後檢查表結構中可以看出的表格。

Answer的問題