zoukankan      html  css  js  c++  java
  • 关于外键约束

    外键约束

    外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。

    外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束。被依赖的表我们通常称之为父表或者主表,设置外键约束的表称为子表或者从表。举个例子:如果想要表示学生和班级的关系,首先要有学生表和班级表两张表,然后学生表中有个字段为stu_clazz(该字段表示学生所在的班级),而该字段的取值范围由班级表中的主键cla_no字段(该字段表示班级编号)的取值决定。那么班级表为主表,学生表为从表,且stu_clazz字段是学生表的外键。通过stu_clazz字段就建立了学生表和班级表的关系。

     

    【示例5】表的外键约束

    -- 创建一个班级表  

    create table class (  

        cno int(4) auto_increment,  -- 只有主键才可以自增  

        cname varchar(12) not null,  

        room  varchar(4),   

        primary key(cno)  

    );  

    -- insert into class values (null,'Java001',507);  

    -- insert into class values (null,'Java002',502);  

    -- insert into class values (null,'大数据001',401);  

    insert into class values (null,'Java001',507),(null,'Java002',502),(null,'大数据001',401);  

    -- 查询数据  

    select * from class  

    -- 创建一个学生表  

    create table student2(  

        sno int(6) primary key auto_increment,  

        name varchar(12),  

        sex char(1),  

        age int(2),  

        classno int(4),  

        constraint fk_stu2_classno foreign key (classno) references class(cno)  

    );  

    desc student2;  

    insert into student2 values(null,'zhangsan','',23,1);  

    insert into student2 values(null,'lisi','',24,1);  

    insert into student2 values(null,'wangwu','',16,2);  

    insert into student2 values(null,'zhaoliu','',24,4);  --   

    delete from class where cno = 1  

    update class set cno = 5 where cno = 2  

    select * from class  

    select * from student2  

    -- 如果想删除1班,请手动的先对1班的学生进行处理(删除或者清空外键)  

    update student2 set classno = null where classno = 1  

    delete from class where cno = 1  

    -- 希望在更新班级编号的时候,可以直接更新学生的班级编号;希望在删除某个班级的时候,清空学生的班级编号  

    -- 修改外键设置:外键要修改只能先删除再添加  

    alter table student2 drop foreign key fk_stu2_classno; -- 注意提示的问题,其实已经删除了外键  

    alter table student2 add constraint fk_stu2_classno foreign key (classno) references class(cno) on delete set null on update cascade  

  • 相关阅读:
    JAVA获取微信小程序openid和获取公众号openid,以及通过openid获取用户信息
    微信公众平台开发教程Java版(三) 消息接收和发送
    在JAVA中怎么比较Double类型数据的大小
    Java利用FastJson一行代码转List<Map>为List<Bean>
    关于java的Synchronized,你可能需要知道这些(上)
    Mybatis传参- 被逗号分割的字符串
    算法疑难(js实现)---8、二叉树的创建(先序遍历)
    算法疑难(js实现)---7、二叉树的创建(层次遍历)
    心得体悟帖---200522(学习方法)
    心得体悟帖---200522(什么都不想,是一种非常好的解决问题的方案)
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14251552.html
Copyright © 2011-2022 走看看