尝试创建两个表时收到错误消息。有一个多值依赖项,因此我分离了表并提出了这个建议:
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列上定义了外键约束,即在表中PHONE使用insert作为电话表,您已经对NameID传递了默认值,但是NameID指向NAME表,并希望从NAME表中插入记录ID,因此没有默认值文档
NameID
PHONE
NAME
生成新的AUTO_INCREMENT值后,您还可以通过执行SELECT LAST_INSERT_ID()获得它
所以您的第二个插入可以使用插入的if from NAMEtable像
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)
如何获取最后插入行的唯一ID
参见小提琴演示