尝试创建两个表时收到错误消息。有一个多值依赖项,所以我分离了表并提出了这个建议:

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中使用了已针对NameID传递了默认值的phone表的插入,但是NameID指向了NAME表,并且希望从NAME表中插入插入的记录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');

您可以通过加入两个表来获取结果
select * from NAME
JOIN PHONE
USING (NameID)

How to Get the Unique ID for the Last Inserted Row

See fiddle Demo

10-07 12:37