zoukankan      html  css  js  c++  java
  • 外键约束:foreign key

    *外键 foreign key*

        1、概念:如果一个实体的(student)的某个字段,指向(引用)另个实体(class)的主键
    (class:class_id),就称为student实体的class_id是 外键 。

      【声名】被指向的实体,称之为主实体(主表),也叫父实体(父表)。class
          负责指向的实体,称之为从实体(从表),也叫子实体(子表)。student


          作用:用于约束处于关系内的实体。

             比如说:我们去一家很火的餐厅吃饭,去餐厅之前我们是在网上预约了位置的客户,与此同时也刚好来了另外一桌未预约的客户,当餐厅恰好空出一个用餐位置。此时餐厅应该先安排在预约名单中客户,而不是未预约的客户。这就是一种约束关系。(例子举得不太好,大佬们见谅哈)


    两大限制:
    1)增加子表记录时,是否有之对应的父表记录。如果有,则数据插入成功;否则,数据插入失败。
    2)在删除或者更新主表记录时,从表应该如何处理相关的记录。


    2、定义外键:

    在从表上,增加一个 外键字段,指向主表的主键。使用关键字 foreign key

    语法:foreign key ([从表]外键字段) 主表名 (关联字段)

    3、例子解释

    #表一:学生信息表(主表)

    CREATE TABLE stu_info (
    id int(10) primary key auto_increment,
    name varchar(10) not null,
    sex varchar(10),
    birth varchar(15)) character set utf8;

    #表二:学生成绩表(从表)

    CREATE TABLE stu_marks (
    id int(10) primary key auto_increment,
    CHINESE int (3),
    MATH int (3),
    ENGLISH int (3),
    foreign key (id) references stu_info (id)) character set utf8; #设置外键约束,foreign key ([从表]外键字段) 主表名 (关联字段)。

    【解析】:

         设置“外键约束”后的作用,相当于事先建立了一个库,当从表需要插入数据时只能插入 被约束的值,也就是 库 中已经存在的值。

    比如我们这边的例子是设置 外键约束 是 id,所以我们在给从表 插入数据时就会有约束,从表 的id值必须是在 主表 中已经存在的,否则报错。

    【报错例子】:

    报错原因:

        我们给学生成绩表(从表)插入信息时,由于学生信息表(主表)中不存在 id=2016888888 的学生信息,所以插入信息失败。

    4、删除操作:

        4.1 删除 ‘从表’ 中的数据:不会影响 主表 的数据

          例子:delete from stu_marks where id=2016030638;

            

       4.2删除 ‘主表’ 中的数据:

            例子:delete from stu_info where id=2015020314;

    解析:由于开启了外键约束,会检查外键约束,所以我们无法“删除”或者“更新”主表 stu_info中的数据。

      4.2.3删除/更新 ‘主表’ 中的数据方法:

          1)关闭外键约束检查:set foreign_key_checks=0;

             

       4.2.4禁止删除/更新 ‘主表’ 中的数据:

           1)打开外键约束检查:set foreign_key_checks=1;

  • 相关阅读:
    海量数据中,寻找最小的k个数。
    快速排序
    反转一个单链表,分别以迭代和递归的形式来实现
    N个大小不等的自然数排序,时间复杂度为O(n),空间复杂度为O(1)
    堆排序
    两个已经排好序的链表合并为一个有序链表
    字符串过滤空格、回车、tab
    求一个浮点数的连续子序列最大乘积 (2013 小米校园招聘笔试题)
    单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列
    给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列。
  • 原文地址:https://www.cnblogs.com/python-wen/p/10039503.html
Copyright © 2011-2022 走看看