2016-12-08 149 views
2

我知道這裏有很多關於這個錯誤的問題,但我已經搜遍了很多,但似乎沒有在我的案例中解釋它! 我用下面的代碼創建一個表:MySQL - 錯誤1215,無法添加外鍵約束

CREATE TABLE Venue (
    venueID VARCHAR(20), 
    venueEmail VARCHAR(30) NOT NULL, 
    address VARCHAR(100), 
    phoneNo VARCHAR(20), 
    managerNo VARCHAR(20), 
    capacity INT(4), 
    PRIMARY KEY (venueEmail) 
)ENGINE=InnoDB; 

,我試圖創建一個表引用的第一個表使用此代碼的外鍵:

CREATE TABLE Concert (
    referenceNo VARCHAR(6), 
    venueEmail VARCHAR(30), 
    eventDate VARCHAR(10), 
    startTime VARCHAR(5), 
    ticketsSold INT(4), 
    PRIMARY KEY (referenceNo), 
    FOREIGN KEY (venueEmail) REFERENCES Venue ON UPDATE CASCADE ON DELETE CASCADE 
)ENGINE=InnoDB; 

但它給我1215錯誤信息!

+1

而不是說*「1215錯誤信息」*,你應該在你的問題中包含消息。另外,你不需要指定一個列,比如'REFERENCES Venue(venueEmail)'? – Santi

+0

難道你不需要在'Venue'表上引用'venueEmail'這個列嗎? –

回答

4

句法明智,這是不正確的。

問題的解決這裏:

CREATE TABLE Venue (
    venueID VARCHAR(20), 
    venueEmail VARCHAR(30) NOT NULL, 
    address VARCHAR(100), 
    phoneNo VARCHAR(20), 
    managerNo VARCHAR(20), 
    capacity INT(4), 
    PRIMARY KEY (venueEmail) 
)ENGINE=InnoDB; 

CREATE TABLE Concert (
    referenceNo VARCaHAR(6), 
    venueEmail VARCHAR(30), 
    eventDate VARCHAR(10), 
    startTime VARCHAR(5), 
    ticketsSold INT(4), 
    PRIMARY KEY (referenceNo), 
    FOREIGN KEY (venueEmail) REFERENCES Venue(`venueEmail`) ON UPDATE CASCADE ON DELETE CASCADE 
)ENGINE=InnoDB; 

注:

被引用的列應像table_name(column_name)予以說明。

您錯過了column_name的一部分。


REFERENCE


更多:

@Bill Karwin添加的註釋部分下面的有用信息:

FWIW這是一個MySQL的癖好。在標準SQL中,如果省略引用的列名稱 ,則它默認與外鍵 鍵列的名稱相同。但InnoDB不支持這種快捷方式語法 - 您必須在兩種情況下指定列。

+1

+1 FWIW這是一個MySQL特性。在標準SQL中,如果省略引用的列名稱,則它默認與外鍵列名稱相同。但是InnoDB不支持這種快捷方式 - 你必須在兩種情況下指定列。 –

+0

太棒了!這是一個很好的補充。我不知道這個標準的SQL規則。謝謝@BillKarwin – 1000111

+0

@ 1000111不需要括號中的單引號,但已修復它。謝謝!! – pxdr0

相關問題