2014-09-24 137 views
1

我在設置名爲CustomerCustomer_Number的兩個表之間建立關係時遇到問題。我有兩個表都設置爲InnoDB都有索引,但是當我去創建外鍵時,我得到一個「沒有索引定義」的錯誤。以下是一些屏幕截圖創建外鍵的問題

這是客戶表。 enter image description here

這是Customer_Number表。

enter image description here 這裏是我嘗試創建外鍵時的錯誤消息。

enter image description here 最後,這是我在嘗試手動創建關係時得到的錯誤。

enter image description here 我似乎無法弄清楚這個問題,而且這讓我瘋狂!

輸出爲SHOW CREATE TABLE Customer

CREATE TABLE `Customer` (
`Customer_ID` int(11) NOT NULL AUTO_INCREMENT, 
`First` varchar(255) NOT NULL, 
`Last` varchar(255) NOT NULL, 
PRIMARY KEY (`Customer_ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 

和輸出SHOW CREATE TABLE Customer_Number

CREATE TABLE `Customer_Number` (
`Num_ID` int(11) NOT NULL AUTO_INCREMENT, 
`Customer_ID` int(11) NOT NULL, 
`Number` varchar(255) NOT NULL, 
PRIMARY KEY (`Num_ID`), 
KEY `Customer_ID` (`Customer_ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 
+0

@MichaelBerkowski與所需的信息更新 – Jcmoney1010 2014-09-24 16:42:27

+0

我嗯其實沒有問題,創建這些表,然後加入FK,或在原來的定義與FK創建它們。這工作:'ALTER TABLE Customer_Number ADD FOREIGN KEY(Customer_ID)REFERENCES Customer(Customer_ID);' – 2014-09-24 16:47:35

+0

當我把你給我的東西,我得到這個錯誤'#1452 - 無法添加或更新子行:外鍵約束失敗('thesnoopz'.'#sql-23d7_8c3428',CONSTRAINT'#sql-23d7_8c3428_ibfk_1' FOREIGN KEY('Customer_ID')REFERENCES'Customer'('Customer_ID'))' – Jcmoney1010 2014-09-24 16:49:58

回答

1

張貼是正確的,應該能夠接受一個新的FOREIGN KEY約束上Customer_Number.Customer_ID因爲這兩個CREATE TABLE聲明滿足必要的標準(與引用列相同的數據類型,可比較的索引或引用列上的主鍵)。

ALTER語句成功在我的測試:

ALTER TABLE Customer_Number ADD FOREIGN KEY (Customer_ID) REFERENCES Customer (Customer_ID); 

作爲陌生與phpMyAdmin如何提煉一些RDBMS的錯誤,這是很難肯定地說,究竟出了什麼問題在GUI。但是,如果手動運行ALTER語句並遇到有關失敗的外鍵約束的錯誤,則表明引用表已包含列中未引用父表中的有效行值的值。爲了揭開這些行,這樣就可以解決這些問題,執行類似的查詢:

SELECT * FROM Customer_Number WHERE Customer_ID NOT IN (SELECT Customer_ID FROM Customer) 

一旦你找到了問題的行,您可以將其刪除(如果不需要)或更新它們的值的有效行的值值在參考表中。如果列的定義允許NULL(您不支持),您也可以UPDATE將它們設置爲NULL,然後再次運行ALTER語句。

也可以暫時禁用外鍵檢查,添加約束,更新行以匹配有效父表值,重新啓用外鍵檢查。

0

請試試這個。

alter table Customer_Number add foreign key(customer_ID) references Customer (Customer_ID);