首页 > 代码库 > 理解外键约束

理解外键约束

--自定义账户访问别的用户的表
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.可以删除班级 同时级联删除对应班级的学生  应用场合:如文章--评论

 

理解外键约束