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  

  • 相关阅读:
    html笔记3
    html笔记2
    html学习第一天
    用Vue中的指令写一个对表格进行增加和删除
    Vue中的列表渲染
    Vue中的计算属性(computed)和侦听器(watch)
    Vue的模块语法
    vue-cli的搭建
    Vue的概念介绍
    React中函数组件和类组件的区别
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14251552.html
Copyright © 2011-2022 走看看