2014-03-05 140 views
2

我在嘗試創建兩個表時收到錯誤。有一個多值依賴,所以我分開的表和與此想出了:MySQL錯誤代碼1452外鍵約束

CREATE TABLE NAME (
NameID  Integer    NOT NULL AUTO_INCREMENT, 
Name  varChar(255)  NOT NULL, 
CONSTRAINT NAME_PK    PRIMARY KEY(NameID) 
); 

CREATE TABLE PHONE (
NameID  Integer    NOT NULL, 
PhoneNumber varChar(15)   NOT NULL, 
NumType  varChar(5)   NOT NULL, 
CONSTRAINT PHONE_FK   FOREIGN KEY(NameID) 
    REFERENCES NAME(NameID), 
CONSTRAINT PHONE_PK   PRIMARY KEY(NameID) 
); 

但試圖與該代碼添加值時:

INSERT INTO NAME (NameID, Name) VALUES (default, 'John Doe'); 
INSERT INTO PHONE (NameID, PhoneNumber, NumType) VALUES (default, '706-782-4719', 'Home'); 

我收到了臭名昭著的1452錯誤:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`phone_mcneill`.`PHONE`, CONSTRAINT `PHONE_FK` FOREIGN KEY (`NameID`) REFERENCES `NAME` (`NameID`)) 

我不完全確定這是什麼意思,因爲我有第一個表中的NameID自動增量。我不能讓它在第二個auto_increment以及它是一個外鍵,對嗎?先謝謝您的幫助。

回答

3

你在表PHONE使用電話表插入你已經通過對填充NameID默認,但填充NameID指向NAME表,並期待有來自NAME表沒有關係插入的記錄ID定義上NameID列即一個外鍵約束「T有一個默認值按照該文檔

When a new AUTO_INCREMENT value has been generated, you can also obtain it by executing a SELECT LAST_INSERT_ID()

所以你的第二插件可以使用插入如果從NAME表像

INSERT INTO NAME (NameID, NAME) VALUES (DEFAULT, 'John Doe'); 
INSERT INTO PHONE (NameID, PhoneNumber, NumType) VALUES (LAST_INSERT_ID(), '706-782-4719', 'Home'); 

,您可以通過加入他們

select * from NAME 
JOIN PHONE 
USING (NameID) 

How to Get the Unique ID for the Last Inserted Row

See fiddle Demo

抓住兩個表中的結果
相關問題