2016-09-22 64 views
0

我知道外鍵是什麼。然而,增加mysql,那個代碼「約束」究竟是幹什麼的?

CONSTRAINT test1

AND

沒有它?

代碼「CONSTRAINT」它到底做了什麼,因爲無論如何您都可以添加外鍵。

感謝, 埃德

+0

'CONSTRAINT'是一個可選的關鍵字,它是標準SQL語法的一部分。其他數據庫允許您創建其他類型的約束,但MySQL只有外鍵。 – Barmar

回答

0

只是RTM:

https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

檢查此琴:

http://sqlfiddle.com/#!9/9fb10

create table a (id int NOT NULL AUTO_INCREMENT, title varchar(20), PRIMARY KEY (`id`)); 

create table b (id int NOT NULL AUTO_INCREMENT, title varchar(20), PRIMARY KEY (`id`), 
       a_id int, 

    CONSTRAINT a_id FOREIGN KEY (a_id) REFERENCES a(id) )ENGINE=INNODB ; 

create table c (id int NOT NULL AUTO_INCREMENT, title varchar(20), PRIMARY KEY (`id`), 
       a_id int, 
    CONSTRAINT a_id_C FOREIGN KEY (a_id) REFERENCES a(id) )ENGINE=INNODB ; 

    #CONSTRAINT a_id FOREIGN KEY (a_id) REFERENCES a(id) )ENGINE=INNODB ; 

create table d (id int NOT NULL AUTO_INCREMENT, title varchar(20), PRIMARY KEY (`id`), 
       a_id int, 

    FOREIGN KEY (a_id) REFERENCES a(id) )ENGINE=INNODB ; 

的想法是針對整個數據庫創建唯一的名稱。 因此,如果您曾創建CONSTRAINT a_id索引,數據庫將檢查並拒絕任何嘗試在任何其他表上創建具有相同名稱的索引。

在上面的例子如果你將嘗試取消註釋

#CONSTRAINT a_id FOREIGN KEY (a_id) REFERENCES a(id) 

c表,MySQL服務器將提示錯誤信息,因爲a_id已經用於b表。

與此同時,如果您只是不使用CONSTRAINT,您可以創建索引,其名稱與表d所示的名稱相同。