在表上添加约束

时间:2013-06-08 22:41:46

标签: sql oracle11g

我是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行的标识符无效。为什么会出现此错误?

3 个答案:

答案 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 第二个表已创建。

延迟约束用于检查数据。延迟只是意味着在交易结束之前不会执行检查。它并不意味着“推迟创建约束,因此我可以设置循环引用”: - )