约束是在数据库中维护数据一致性的重要工具。但有时候约束也会带来一些问题。
问题叙述
创建课程表
create table Course
(Cno char(4) primary key,
Cname char(40),
Cpno char(4),
Ccredit smallint,
foreign key (Cpno) references Course(Cno)
);
当你想要创建这样一个表时
然后输入数据
insert into Course values (1,'数据库',5,4);
insert into Course values (2,'数学',NULL,2);
insert into Course values (3,'信息系统',1,4);
insert into Course values (4,'操作系统',6,3);
insert into Course values (5,'数据结构',7,4);
insert into Course values (6,'数据处理',NULL,2);
insert into Course values (7,'PASCAL语言',6,4);
却发现出错了,有外键约束。你不能插入数据。
怎么办呢?
问题解决
有两种方法
- 一是删除外键约束,插入数据之后,再加上外键约束。
这种方法,很麻烦,我不是很喜欢,也不是最好的方法。 - 二是禁用外键约束,然后插入数据,再打开外键约束。(这才是本文的重点,唠了半天终于到点上了。。。。)
我们看代码
/*禁用外键约束*/
alter table 表名 disable constraint 外键约束名;
/*解除禁用*/
alter table 表名 enable constraint 外键约束名;
现在又有问题了上面我们不知道外键约束名啊,我们建表的时候没有给外键约束起名。。。
那怎么办啊,问题总是要解决的不是吗,你没起名,可系统给他起名字啦,所以你要查系统给的名称,怎么查呢,下面代码告诉你。
/*就是用数据字典里的这个表里查user_constraints*/
select * from user_constraints where table_name='COURSE';
查询的结果
好了问题都解决了。
多谢刘老师的点拨与解答,刘老师提出了第三种方案,在这里为大家献上。
第三种方案