zoukankan      html  css  js  c++  java
  • mysql--外键(froeign key)

    如果一个实体的某个字段指向另一个实体的主键,就称为外键
    被指向的实体,称之为主实体(主表),也叫父实体(父表)。
    负责指向的实体,称之为从实体(从表),也叫子实体(子表)

     

    作用:
    用于约束处于关系内的实体
    增加子表记录时,是否有与之对应的父表记录

    如果主表没有相关的记录,从表不能插入

     

    先插入主表数据后再插入从表数据:

     

    在删除或者更新主表记录时,从表应该如何处理相关的记录

    设置级联操作:
    在主表数据发生改变时,与之关联的从表数据应该如何处理
        使用关键字:
         on update
         on delete
        来标识
    允许的级联动作:
    cascade关联操作,如果主表被更新或删除,从表也会执行相应的操作
    set null,表示从表数据不指向主表任何记录
    restrict:拒绝主表的相关操作

    alter table t_student add foreign key (class_id) references t_class (class_id)
    on delete set null; # 在删除外键时,将从表的外键值设置为null


    修改外键:
    先删除这个表的外键,然后再增加
    alter table tb_name drop froeign key 外键名称
    外键名称在建立外键时可以自定义名称,如果不自定义,会按照mysql自动生成一个名称
    show create table tb_name;
     

    alter table t_student drop foreign key t_student_ibfk_1;


     

    删除外键后不会对表中的数据造成任何影响,改变的只是对表的一种约束

    alter table t_student add foreign key (class_id) references t_class (class_id)
    on delete set null; # 在删除外键时,将从表的外键值设置为null

     

     

    注:on delete 与on update 可以同时出现,
     但在on delete 或on update 后不能同时出现cascade、set null、restrict,只能有一个
    关于restrict的外键约束此处没有写,与其他两个一样
     restrict:拒绝主表的相关操作,在主表更新或者删除数据时,在从表中存在与主表主键相关的数据,则不允许对主表数据进行更新或者删除

    在不设置任何级联关系约束时,主表默认会是restrict

     


    在restrict约束下,如果想要删除主表数据,除了可以删除没有与子表数据相关的数据外,
    可以先修改子表中的外键(修改时,外键必须也要关联到主表的主键,否则不能修改成功)
     

    也可以先删除与想要删除的主表数据的子表数据,再去删除此条主表数据

     

  • 相关阅读:
    super().__init__()方法
    so the first day
    left join,right join,inner join,full join之间的区别
    C#中几种常用的集合的用法ArrayList集合HashTable集合List<T>集合Dictionary<K,V>集合及区别
    C#中Dictionary<string,string>的初始化 两种方式不同
    C#中Dictionary的初始化方式
    如何批量修改文件后缀名?cmd命令 ren *.gif *.jpg
    eclipse查看一个方法被谁引用(调用)的快捷键四种方式
    C# 数组集合
    Java-数组和集合简单使用
  • 原文地址:https://www.cnblogs.com/zunpeng/p/3878459.html
Copyright © 2011-2022 走看看