【问题标题】:Error report - ORA-02291: integrity constraint violated - parent key not found错误报告 - ORA-02291: 违反完整性约束 - 未找到父键
【发布时间】:2018-09-09 01:17:18
【问题描述】:

所以我在Oracle中编写了一些代码并建立了以下表格:

CREATE TABLE users
(
    user_id         NUMBER          NOT NULL,
    email_address   VARCHAR2(50)    NOT NULL    UNIQUE,
    first_name      VARCHAR2(10)    NOT NULL,
    last_name       VARCHAR2(10)    NOT NULL,
    CONSTRAINT users_pk PRIMARY KEY (user_id)
)


CREATE TABLE product 
(
    product_id      NUMBER,
    product_name    VARCHAR2(50)    NOT NULL,
    CONSTRAINT product_pk PRIMARY KEY (product_id)
)

CREATE TABLE downloads
(
    download_id     NUMBER, 
    user_id     NUMBER  NOT NULL,
    product_id NUMBER   NOT NULL,
    download_date   DATE NOT NULL,
    filename    VARCHAR2(50)    NOT NULL,
    CONSTRAINT downloads_pk PRIMARY KEY (download_id),
    CONSTRAINT downloads_fk 
        FOREIGN KEY(user_id) REFERENCES users (user_id),
    CONSTRAINT downloads_fk2
        FOREIGN KEY(product_id) REFERENCES product(product_id)
)

CREATE SEQUENCE user_id_seq
CREATE SEQUENCE download_id_seq
CREATE SEQUENCE product_id_seq

downloads 表连接用户和产品表,包含外键 user_id 和 product_id。我正在尝试通过以下代码将数据插入到下载表中:

INSERT INTO downloads (download_id,user_id,product_id,download_date,filename)
    VALUES(download_id_seq.NEXTVAL,1,2, SYSDATE, 'one_horse_town.mp3')
INSERT INTO downloads (download_id,user_id,product_id,download_date,filename)
    VALUES(download_id_seq.NXTVAL, 2, 1, SYSDATE, 'pedals_are_falling.mp3')
INSERT INTO downloads (download_id,user_id,product_id,download_date,filename)
    VALUES(download_id_seq.NEXTVAL, 2, 2, SYSDATE, 'random_song.mp3')

Oracle 然后给我以下错误:

错误报告 - ORA-02291:违反完整性约束 (BC29369.DOWNLOADS_FK2) - 未找到父密钥。

我不确定为什么会出现这种情况,因为在我看来,我已经清楚地标记了主键和外键关系。有谁知道如何解决这一问题?提前谢谢!

【问题讨论】:

  • 因为您的产品表中没有行。

标签: sql oracle


【解决方案1】:

约束

CONSTRAINT downloads_fk FOREIGN KEY(user_id) REFERENCES users (user_id)

CONSTRAINT downloads_fk2 FOREIGN KEY(product_id) REFERENCES product(product_id)

表示您尝试插入downloads 表的user_id 值1 和2、product_id 值1 和2 必须已经存在于users 表和product 表中。

如果usersproduct 表在您将这些值插入downloads 表之前未填充这些值(1 和2),您将收到此错误,因为将违反完整性约束。

您正在创建一个没有父记录的孤立记录。这正是您在创建这两个约束时确保不会发生的事情。

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 2020-07-19
    • 2018-04-18
    • 2014-06-12
    • 2021-08-12
    • 2018-05-23
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多