Arc*_*ald 4 mysql sql database foreign-keys mysql-error-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)
);
Run Code Online (Sandbox Code Playgroud)
但是在尝试使用此代码添加值时:
INSERT INTO NAME (NameID, Name) VALUES (default, 'John Doe');
INSERT INTO PHONE (NameID, PhoneNumber, NumType) VALUES (default, '706-782-4719', 'Home');
Run Code Online (Sandbox Code Playgroud)
我收到臭名昭着的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`))
Run Code Online (Sandbox Code Playgroud)
我不完全确定这意味着什么,因为我在第一个表中有NameID自动增量.我不能在第二个中使用auto_increment以及它是外键,对吗?在此先感谢您的帮助.
您已经在NameID列上定义了一个外键约束,即在表中PHONE使用您已针对NameID传递的电话表插入,但NameID指向NAME表并期望从NAME表中插入记录ID,它没有默认值文档
生成新的AUTO_INCREMENT值后,您还可以通过执行SELECT LAST_INSERT_ID()来获取它
所以你的第二个插入可以使用从NAME表中插入的if
INSERT INTO NAME (NameID, NAME) VALUES (DEFAULT, 'John Doe');
INSERT INTO PHONE (NameID, PhoneNumber, NumType) VALUES (LAST_INSERT_ID(), '706-782-4719', 'Home');
Run Code Online (Sandbox Code Playgroud)
您可以通过加入它们来获取两个表的结果
select * from NAME
JOIN PHONE
USING (NameID)
Run Code Online (Sandbox Code Playgroud)