2016-06-22 30 views
-1

我是學習SQL語法的新手,在書中遇到了這個例子。我明白需要使用外鍵並使用約束函數來將鍵設置爲創建的另一個表(本例中爲EMPLOYEE_TBL)。外鍵約束語法

我的問題是爲什麼它列出了行CONSTRAINT EMP_ID_FK FOREIGN KEY (EMP_ID)。什麼是EMP_ID_FK部分?由於您只需要使用CONSTRAINT函數將子表上的一個字段設置爲父表,因此難道您只是將它寫爲CONSTRAINT FOREIGN KEY (EMP_ID) REFERENCES EMPLOYEE_TBL (EMP_ID));而不是?

我理解錯誤嗎?任何幫助,將不勝感激。謝謝!

CREATE TABLE EMPLOYEE_PAY_TBL 
(EMP_ID CHAR(9) NOT NULL, 
DATE_HIRE DATE NULL, 
DATE_LAST_RAISE DATE NULL, 
CONSTRAINT EMP_ID_FK FOREIGN KEY (EMP_ID) REFERENCES EMPLOYEE_TBL (EMP_ID)); 
+0

您使用的是MySQL還是MS SQL Server? (兩個不同的產品,有一些SQL差異。) – jarlh

+3

這是'CONSTRAINT'對象的名稱。你需要命名它。 – Siyual

+0

@jarlh本書中的示例使用MySQL。 – arooney88

回答

1

條款CONSTRAINT EMP_ID_FK只給出約束的名稱。如果您想禁用或刪除約束,則稍後有必要。你的名字是正確的(EMP_ID_FK)是可選的;如果您省略,則還可以省略CONSTRAINT關鍵字,因爲條款FOREIGN KEY足以告訴解釋器它是您想要的。

命名你的約束是完全可選的,但爲了文件的目的,它被認爲是很好的做法,並且如我所說的,你以後需要對約束做些事情。如果您省略名稱,數據庫將自動爲您命名約束條件,但祝您找到該名稱。

+0

感謝您的解釋。 – arooney88

0

把它這樣。

表1必須具有對錶2的引用。表2具有主鍵ID,該主鍵ID是唯一值,這意味着它可以用該ID訪問,因爲它在該表的所有行中都是唯一的。現在表格1需要引用該ID。您需要將該ID存儲在表1中,以便您可以參考該表,並知道表2,表1所指的點。您使用命名約定Table2_ID_FK來知道表1中的字段是對錶2的ID的引用。約束是設置這些表之間的實際關係。