CREATE TABLE Film
(
    idFilm        NUMBER         GENERATED BY DEFAULT as IDENTITY (START WITH 1 INCREMENT BY 1) PRIMARY KEY,
    titre         VARCHAR2(100)  NOT NULL,
    anneeDeSortie NUMBER(4)      NOT NULL,
    langueOrigine VARCHAR2(25),
    duree         Number(3)      NOT NULL,
    resume        VARCHAR2(600)  NOT NULL,
    affiche       VARCHAR2(2083),
    realisateur   number,
    constraint fk_idRealisateur
        FOREIGN KEY (realisateur) REFERENCES Personnalite (idPersonnalite)
);

其中包含以下行:

SELECT * FROM film where film.idfilm = 164184;

enter image description here

当我try 向表Scenariste添加一行时:

CREATE TABLE Scenariste
    (
    idScenariste  NUMBER GENERATED ALWAYS as IDENTITY (START WITH 1 INCREMENT BY 1) PRIMARY KEY,
    nom           VARCHAR2(100)  NOT NULL,
    idFilm        NUMBER         NOT NULL,
    constraint fk_idScenariste
        FOREIGN KEY (idScenariste) REFERENCES Film (idFilm)
);

INSERT INTO scenariste (nom, idFilm) VALUES ('Paul Attanasio', 164184);

我得到以下错误:

Error starting at line : 3 in command -
INSERT INTO scenariste (nom, idFilm) VALUES ('Paul Attanasio', 164184)
Error report -
ORA-02291: integrity constraint (EQUIPE106.FK_IDSCENARISTE) violated - parent key not found

如果与id164184的电影之争真的存在,为什么会发生这种情况?

推荐答案

您使用错误的FK约束定义了表.

您必须:

CREATE TABLE Scenariste
(
    idScenariste  NUMBER GENERATED ALWAYS as IDENTITY (START WITH 1 INCREMENT BY 1) PRIMARY KEY,
    nom           VARCHAR2(100)  NOT NULL,
    idFilm        NUMBER         NOT NULL,
    CONSTRAINT fk_idScenariste
        FOREIGN KEY (idScenariste) REFERENCES Film (idFilm)
);

但我认为FK约束应该使用idFilm(而不是idScenariste列):

    CONSTRAINT fk_idScenariste
        FOREIGN KEY (idFilm) REFERENCES Film (idFilm)

Sql相关问答推荐

如何退回当年的所有参赛作品?""

有没有办法在每次计算每一行的数据时更新2个值?

分组多输出访问查询问题

当一个视图在Postgres中失效时?

Access VBA SQL命令INSERT FOR MULTIME VALUE

PostgreSQL基于2个COLS的任意组合 Select 唯一行

检索上一个星期四和上一个星期三

替换上一个或下一个值中的空值并添加其价格日期

使用SQL创建列出两个时间戳之间小时数的列

PostgreSQL中递归CTE查询的故障过滤

如何根据 SQL 中的阈值标记一个集群中的所有值?

如何解释 SQL Server 中的 Foxpro 语法?

SQL Server中使用min()和max()从选定的特定值id表中删除不必要的时间

PostgreSQL - 递归地聚合来自不同列的属性

如何在 ClickHouse SQL 中使用 CTE 将邻居语句中的数字作为偏移量传递?

在 MS Access 中连接相关记录

条件前置值

如何找到特定时间间隔内的最大和最小日期?

具有关联统计信息 N+1 的 Rails 6 索引资源?

包含多行的 SQL 查询