zoukankan      html  css  js  c++  java
  • 外键和级联

    关于外键写的不错的网址:http://blog.csdn.net/lidaasky/article/details/7645524

    • 外键
      • 定义
      • 作用
      • 主表和从表
      • 建键原则
      • 事件触发限制
    • 外键简单实例
    • 触发器实现
      • 建表语句
      • 关系说明
      • 实现级联删除
    • 更改设置实现
    • 总结

     

    文首

            今天给考试系统添加学生信息失败,原因是student与classes表有级联关系,作为从表的student表不能随意添加,这些都学过却还没怎么用过,借这次机会学习一下。

    外键

             说到级联删除不得不先说一下外键,外键的定义:“如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键;换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键”。 

            建立外键的sql语句:

    [sql] view plaincopy
     
    1. foreign key(idB) references A(idA)  

     

    [sql] view plaincopy
     
    1. foreign key(idB) references A(idA)  

     

            从语法分析也可以看出:外键是一种表之间字段值的引用关系

            主表和从表

            主表和从表:以另一个关系的外键作主关键字的表被称为从表,具有此外键的表被称为主表。说白了就是:主表是被引用的表,外表是引用其他表的表

            那么外键有什么作用?外键作用可以说是:保持数据一致性,完整性,关联性,主要目的是控制存储在外键表中的数据。就是当你对一个表的数据进行操作,和他有关联的一个或更多表的数据能够同时发生改变,避免无效或是无用的改变和孤立的数据

            建键原则

           1、 外键字段为主键
      2、 所有的键都必须唯一
      3、避免使用复合键
      4、外键总是关联唯一的键字段

            外键约束事件触发。既然有外键约束,当违反约束时会发生什么?我们把它的反应看作事件,一共有四种:

            1、级联:当主表更改时,从表跟从更改。

            2、不执行任何操作。

            3、设置null。

            4、设置默认值。

         主表、从表和外键的定义:我把我的笔记本借给你用,可以把“我”当作是主表、“笔记本”当作外键、“你”当作从表,就是说“你”在使用(引用)“我”的“笔记本”;

    外键的作用就是:现在你想把我的笔记本卖了扔了送人(增加更新删除等),得看看我允许不允许,我想搬家走人,你不把笔记本还给我,我不能搬;

      建键原则:借之前首先咱得说好了,我只有这么一台笔记本,你也最好是也只借了我这台笔记本,避免你也借了别人的笔记本,不知道哪个是我的了。

      事件触发:我说你赶紧把笔记本还给我,你可以选择还给我,可以选择不搭理我等。总而言之,由于这笔记本,“你”和“我”关联起来,这台笔记本怎么样,不能一个人说了算。

    级联删除

           但是如果想级联删除怎么办?

           sql语句修改设置:因为默认的外键触发是“不执行任何操作”,所以我们可以使用sql语句更改设置:

     

    [sql] view plaincopy
     
    1. FOREIGN KEY(id)REFERENCES tabley(id) on delete cascade on update cascade   

     

    [sql] view plaincopy
     
    1. FOREIGN KEY(id)REFERENCES tabley(id) on delete cascade on update cascade   

            意思是从表会跟随主表的改变而改变。

     

     

  • 相关阅读:
    【Android 工具类】经常使用工具类(方法)大全
    driver: Linux设备模型之input子系统具体解释
    ural 1057 Amount of degrees 【数位dp】
    Java8 Lambda表达式教程
    Java线程池
    NodeJS实战——创建基础应用并应用模板引擎
    【网络】代理服务器
    【HTTP】Wireshark过滤规则
    【HTTP】WireShark中获取Content-Encoding: gzip时的响应内容
    【python】判断字符串日期是否有效
  • 原文地址:https://www.cnblogs.com/x739400043/p/4732158.html
Copyright © 2011-2022 走看看