簡體   English   中英

MySQL錯誤代碼1452外鍵約束

[英]MySQL Error Code 1452 Foreign Key Constraint

我嘗試創建兩個表時收到錯誤。 有一個多值的依賴,所以我分開了表並想出了這個:

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 for phone table,您已針對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');

您可以通過加入它們來獲取兩個表的結果

select * from NAME
JOIN PHONE 
USING (NameID)

如何獲取上次插入行的唯一ID

請參閱小提琴演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM