2014-03-05 2 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 할 수 없다. 맞습니까? 도움에 미리 감사드립니다.

당신은 NameID에 대한 기본을 통과했지만, NameID이 NAME 테이블을 가리키는하고 아무튼 NAME 테이블에서 삽입 된 레코드 ID가 기대되는 전화 테이블에 대한 삽입을 사용하여 테이블 PHONENameID 열 예에 외래 키 제약 조건을 정의

답변

3

'이 t은

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

그래서 두 번째 삽입이 경우

INSERT INTO NAME (NameID, NAME) VALUES (DEFAULT, 'John Doe'); 
INSERT INTO PHONE (NameID, PhoneNumber, NumType) VALUES (LAST_INSERT_ID(), '706-782-4719', 'Home'); 
같은 NAME 테이블에서 삽입 사용할 수있는 문서에 따라 기본값이3210

그리고 당신은 그들을

select * from NAME 
JOIN PHONE 
USING (NameID) 

How to Get the Unique ID for the Last Inserted Row

See fiddle Demo

에 가입하여 두 테이블의 결과를 잡을 수 있습니다
관련 문제