2014-03-05 143 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

抓住两个表中的结果
相关问题