zoukankan      html  css  js  c++  java
  • 理解外键约束

    --自定义账户访问别的用户的表
    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.可以删除班级 同时级联删除对应班级的学生  应用场合:如文章--评论
  • 相关阅读:
    ueditor实现ctrl+v粘贴word图片并上传
    fckeditor实现ctrl+v粘贴word图片并上传
    kindeditor实现ctrl+v粘贴word图片并上传
    ckeditor实现ctrl+v粘贴word图片并上传
    html大文件传输功能
    html大文件传输解决方案
    html大文件传输教程
    html大文件传输方案
    PDI(Kettle)的使用六 kitchen
    PDI(Kettle)的使用五 Pan
  • 原文地址:https://www.cnblogs.com/qingfengzhuimeng/p/6891498.html
Copyright © 2011-2022 走看看