zoukankan      html  css  js  c++  java
  • 12.外键约束

    外键约束

    Foreign  Key

    外键约束

    保持数据一致性、完整性,

    实现一对一,一对多关系

    foreign  key(当前表中的列,如:id) reference 关联的表的表名(关联的表中的列)

    实际项目中,上面这种物理外键并不常用,一般通过逻辑外键进行定义,即通过表结构进行外键约束,即创建表的时候不要去写它在句子里,我只要知道memberid就是指代member中的id就够了,就是我们自己去约束,通过数据字典指代用户表中的id就可以了。。

    外键的条件:

    1.子表和父表必须存储引擎相同

    2.数据表存储引擎为InnoD8

    3.外键列和参照列数据类型要一直(数字长度和是否有符号要保持一致,字符长度可以不同)

    4.外键列和参照列必须创建索引。

     什么是引擎?

    引擎(Engine):是电子平台上开发程序或系统的核心组件。利用引擎,开发者可迅速建立、铺设程序所需的功能,或利用其辅助程序的运转。一般而言,引擎是一个程序或一套系统的支持部分。常见的程序引擎有游戏引擎,搜索引擎,杀毒引擎等。

    存储引擎就是指表的类型以及表在计算机上的存储方式

    存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分。不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储。我们可以根据数据的特点来选择不同的存储引擎。

    1.InnoDB

    InnoDB给MySQL的表提供了事务处理回滚崩溃修复能力多版本并发控制的事务安全。在MySQL从3.23.34a开始包含InnnoDB。它是MySQL上第一个提供外键约束的表引擎。而且InnoDB对事务处理的能力,也是其他存储引擎不能比拟的。靠后版本的MySQL的默认存储引擎就是InnoDB支持id自增,还支持外键

    innoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大(连表查询)。

    2.MyISAM

    MyISAM的表存储成3个文件。文件的名字与表名相同。拓展名为frmMYDMYI。其实,frm文件存储表的结构;MYD文件存储数据,是MYData的缩写;MYI文件存储索引,是MYIndex的缩写。

    基于MyISAM存储引擎的表支持3种不同的存储格式。包括静态型、动态型和压缩型。

    其中,静态型是MyISAM的默认存储格式,它的字段是固定长度的,该表具有极高的访问速度,即使在操作相当的数据表也是如此,但其最大的缺点就是占用空间较大;

    注意:那么,怎么去看它是不是InnoD8的存储引擎呢,可以把整个库,转存为一条SQL到桌面去保存,如下图:

    转存完后,然后来查看这条SQL语句,拖动text到Sublime Text中(一种编译器,类似pycharm的工具),如下图:

    上图中ENGINE=MYISAM,这个就表示它不是InnoD8的引擎,它的要求是外键必须使用InnoD8的引擎。

    解决办法:

    在查询界面输入show ENGINES 

    可以看出上图默认的是MyISAM,而我们要的是Inno8这种存储引擎,因此在创建表的时候,在与外键关联的表创建的语句最后面写入ENGINE=InnoD8

    创建完成运行后,打开表,选外键可以看到是表中的哪列,参考了哪个数据库中哪个表中的哪个栏位。如下图:

     现在演练一遍:

    1,先在member表中添加一条记录,如下图:

    接下来这个会员肯定要在loan表中寸一条记录:

    如上图,会提示两表的外键关联失败,提示:不能添加一列子行,因为存在外键,相当于loan是字表,member是主表,子表中的外键列和主表中的约束失败,因为member中并不存在一个为2的外键值。

    注意:物理外键一般不建议去创建,虽然它保证了数据的一致性,但也会带来维护成本,通常是开发去维护,根据逻辑外键去维护数据的一致性,有维护成本。

  • 相关阅读:
    python文件处理
    pycharm基础
    lvs集群DR模式,负载均衡
    JSP动作元素<jsp:include>和<jsp:param>的搭配使用
    Mybatis的动态SQL讲解
    hibernate多对多查询
    Hibernate配置文件与映射文件详解
    maven的不同版本下载及环境配置
    二级联动,例:根据省份选择市区
    关于JSP页面的静态包含和动态包含
  • 原文地址:https://www.cnblogs.com/Abby123wen/p/11195160.html
Copyright © 2011-2022 走看看