我是SQL Oracle的新手。我有以下脚本:
create table students(
sid char(10),
honors char(10) not null,
primary key (sid),
Constraint studentConst foreign key (honors) references Courses(cid),
);
create table Courses(
cid char(10),
grader char(20) not null,
primary key (cid),
Constraint CoursesConst foreign key (grader) references students(sid),
);
SET CONSTRAINT studentConst,CoursesConst DEFERRED;
运行上面的脚本时出现以下错误: SQL错误:ORA-00904 ::第5行的标识符无效。为什么会出现此错误?
答案 0 :(得分:0)
看起来第5行正在尝试引用Courses(cid)
。但是,此时,Courses
表不存在,因为它在以下SQL块中创建。
首先尝试创建从属表。
答案 1 :(得分:0)
在构建表之后添加约束。您可以使用alter table
语句执行此操作:
create table students(
sid char(10),
honors char(10) not null,
primary key (sid)
);
create table Courses(
cid char(10),
grader char(20) not null,
primary key (cid),
Constraint CoursesConst foreign key (grader) references students(sid)
);
alter table students add constraint studentConst foreign key (honors) references Courses(cid)
SQLFiddle是here。
答案 2 :(得分:0)
我认为您不能在尚不存在的表上创建外键约束。
由于您有双向约束,因此您需要创建第一个表而不约束,然后在后添加alter table
第二个表已创建。
延迟约束用于检查数据。延迟只是意味着在交易结束之前不会执行检查。它并不意味着“推迟创建约束,因此我可以设置循环引用”: - )