已存在对应Film记录,为何仍触发ORA-02291外键约束错误?
外键约束错误原因及修复方案
错误根源
你在创建Scenariste表时,外键约束的字段完全写错了:
原约束语句是:
constraint fk_idScenariste FOREIGN KEY (idScenariste) REFERENCES Film (idFilm)
这里把Scenariste自身的主键idScenariste当成了外键字段,关联到Film的idFilm。但插入数据时,idScenariste是自增生成的1,而Film表中并没有idFilm=1的记录,所以触发ORA-02291错误——和你插入的idFilm=164184完全无关,因为这个字段根本没参与外键校验。
正确的表结构
外键应该绑定Scenariste中存储电影ID的idFilm字段,关联Film的主键idFilm。修正后的建表语句:
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_scenariste_film FOREIGN KEY (idFilm) REFERENCES Film (idFilm) );
验证修复
用修正后的表结构执行插入语句:
INSERT INTO scenariste (nom, idFilm) VALUES ('Paul Attanasio', 164184);
此时外键校验的是idFilm字段,Film表中存在idFilm=164184的记录,插入会成功。
内容的提问来源于stack exchange,提问作者Luis Angel Urena Lopez
相关产品推荐
相关产品推荐

