【问题标题】:MySQL Error Code 1452 Foreign Key ConstraintMySQL 错误代码 1452 外键约束
【发布时间】:2014-04-08 06:15:59
【问题描述】:

我在尝试创建两个表时收到错误消息。有一个多值依赖,所以我将表分开并想出了这个:

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 以及它是一个外键,对吗?提前感谢您的帮助。

【问题讨论】:

    标签: mysql sql database foreign-keys mysql-error-1452


    【解决方案1】:

    您已经在NameID 列上定义了一个外键约束,即在表PHONE 中使用插入电话表,您已通过默认NameID,但NameID 指向NAME 表并期望插入记录ID从NAME 表中,它没有文档中的默认值

    当一个新的 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)
    

    How to Get the Unique ID for the Last Inserted Row

    See fiddle Demo

    【讨论】:

      猜你喜欢
      • 2018-02-15
      • 2013-11-17
      • 2012-01-08
      • 2014-03-31
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2013-11-15
      • 2014-09-10
      相关资源
      最近更新 更多