zoukankan      html  css  js  c++  java
  • 【数据库】主键、外键、索引

    设有3个表:

    学生表(学号,姓名,性别,班级)

    课程表(课程编号,课程名,学分)

    成绩表(学号,课程号,成绩)

    主键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就成为一个主键。

    举例:学生表的学号,课程表的课程编号,成绩表的(学号,课程号)属性组

    外键:用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性

    举例:成绩表中的学号,就是学生表的外键。

    SQL的主键和外键的约束:

       外键取值规则:空值或参照的主键值。

    (1)插入非空值时,如果主键表中没有这个值,则不能插入。

    (2)更新时,不能改为主键表中没有的值。

    (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

    (4)更新主键记录时,同样有级联更新和拒绝执行的选择。

     

    索引:在数据库中,索引的含义与日常意义上的“索引”一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象。

    A)索引可以避免全表扫描。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页。
    B)对于非聚集索引,有些查询甚至可以不访问数据页。
    C)聚集索引可以避免数据插入操作集中于表的最后一个数据页。
    D)一些情况下,索引还可用于避免排序操作。  

     

    聚集索引:叶结点也即数据结点,所有数据行的存储顺序与索引的存储顺序一致。 

    非聚集索引:表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,该层紧邻数据页,其行数量与数据表行数据量一致。

     

    主键、外键和索引的区别

     

    定义:

     主键--唯一标识一条记录,不能有重复的,不允许为空

     外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值

     索引--该字段没有重复值,但可以有一个空值

     

    作用:

     主键--用来保证数据完整性

     外键--用来和其他表建立联系用的

     索引--是提高查询排序的速度

     

    个数:

     主键--主键只能有一个

     外键--一个表可以有多个外键

     索引--一个表可以有多个唯一索引

    参考资料:

    1.http://www.doc88.com/p-538467175318.html

    2.http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html

    3.http://kb.cnblogs.com/page/45712/

  • 相关阅读:
    golang语言特性
    Mysql学习之order by的工作原理
    Mysql聚合函数count(*) 的性能分析
    Mysql的刷脏页问题
    普通索引与唯一索引的选择问题
    Mysql锁的类型与简析
    深入浅出Mysql索引
    Mysql修改语句的运行流程
    Mysql查询语句的运行流程
    Go语言入门之切片的概念
  • 原文地址:https://www.cnblogs.com/dplearning/p/4755616.html
Copyright © 2011-2022 走看看