理解外键约束

--自定义账户访问别的用户的表
select * from scott.emp;
select * from scott.dept;

--foreign key 外键约束
--创建班级表
create table t_class(
    cid number(6),
    cname varchar2(12)
)

--方式三:添加班级约束
alter table t_class add constraints pk_class primary key(cid);
alter table t_class modify cname varchar2(12) not null;

--班级表添加数据
insert into t_class values (1,'java304');
insert into t_class values (2,'java204');
insert into t_class values (3,'android');
insert into t_class (cid,cname)values (4,'android');
select * from t_class;
drop table t_class;

--创建学生表
create table t_student(
    sno number(6) primary key,
    sname varchar(12) not null,
    sex varchar2(2) default '' check(sex='' or sex=''),
    age number(3) check(age>=10 and age<=30),
    enterdate date,
    classid number(6),
    --方式一:创建外键约束
    --classid number(6) references t_class(cid),  --references 加s
    email varchar2(30) unique  --逗号注意!
    --方式二:创建表时 单独 创建外键约束
    --constraints fk_student_classid foreign key(classid) references t_class(cid)    
)
--方式三:创建表后 通过修改表的方式创建外键约束
alter table t_student add constraints fk_student_classid foreign key(classid) references t_class(cid);

alter table t_student add constraints fk_student_classid foreign key(classid) references t_class(cid) on delete set null;
alter table t_student add constraints fk_student_classid foreign key(classid) references t_class(cid) on delete cascade;

alter table t_student drop constraints fk_student_classid;
--添加表数据
insert into t_student values(1,'yan','','20','29-3月-2017','1','bao@sxt.cn');
insert into t_student values(2,'yan','','20','29-3月-2017','22','bao@sxt2.cn');
insert into t_student values(3,'yan','','20','29-3月-2017','1','bao@sxt3.cn');

delete t_class  where cid = 1;
select * from t_class; 
insert into t_class (cid,cname)values(1,'java304');

select * from t_student;
drop table t_student;
--缺点:
--1.学生的编号不能是不存在的班级 
--解决方案:外键约束
--2.删除指定的班级(cid)时,关联表中(t_student)指定的学生及其班级编号(classid)仍然存在
--解决方案:
--1.默认的 不删除学生 就不能删除班级
--2.可以删除班级 同时将学生的classid置为空  应用场合:如学生--班级
--3.可以删除班级 同时级联删除对应班级的学生  应用场合:如文章--评论

 

posted @ 2017-05-22 21:30  清风追梦enjoy  阅读(403)  评论(0编辑  收藏  举报