• mysql实体关系(mysql学习五)


    实体关系

     表设计

    1:1

    两个实体表内,存在相同的主键字段

    如果记录的主键值等于另一个关系表内记录的主键值,则两条记录的对应为一一对应

    优化上称为垂直分割

    1n

    一个实体对应多个其他实体(一个班级对应多个学生)

    设计:在多的那段增加一个字段,用于指向该实体所属的另外实体的标识

    M:n

    多对多

    设计典型的利用一个中间表表示实体之间的对应关系。中间表的每一条记录表示一个关系。

     可以分析:一个m:n可拆解为 1:m  1:n来实现

    外键 foreign key

    概念:如果一个实体(student)的某个字段(student:class_id)指向(引用)另一个实体(class)的主键(class:class_id)

    就称student实体的class_id是这两个实体关联的外键。

    被指向的实体称为主实体(主表),也叫父实体(父表)

    负责指向的实体称为从实体(从表),也叫子实体(子表)

    一般在哪个表里定义外键 这个表就是子表

    作用:

    约束处于关系内的实体

      增加子表记录时,是否有与之对应的父表记录。删除和更新主表记录时,从表应该如何处理与之相关的记录。

    定义一个外键

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

    Foreign key (外键字段) references 主表名 (关联字段) [主表记录删除时动作][主表记录更新时记录]

    建完表后插入

    在子表增加记录时,父表中必须有与之对应的记录存在

    设置级联操作

     在主表数据发生改变时,与之关联的从表数据该如何变化

    主表更新

    主表删除

    使用关键字on update,on delete来标识

    允许的级联操作:

     Cascade:关联操作如果主表被删除,那么从表也会执行相关的操作

     Set null : 设置为null表示从表不指向任何主表记录

     Restrict :拒绝主表的相关操作

    修改外键:先删除再新建外键,通过修改表来完成。

    Alter table student drop foreign key (class_id) 有问题

    删除外键需要通过指定外键名达到目的

    可以通过创建外键时指定名称或者使用Mysql默认生成的名称

    新建外键:

    Alter table student add foreign key (class_id) references class (class_id)

     On delete set null

    注意关联的字段必须类型一致

    class_id定义时要能为null

    On update指的是只有主表的主键发生变化,才能对从表产生影响。

    现在表中数据默认都是restrict show 里默认不显示

    Php实际项目中只有关联,不设置外键,删除或更新时通过sql语句叠加操作

    有名无实,在支持外键的存储引擎表中才能使用(只有innodb

  • 相关阅读:
    UVa 1643 Angle and Squares
    UVa 1210 (高效算法设计) Sum of Consecutive Prime Numbers
    UVa 1213 (01背包变形) Sum of Different Primes
    UVa 1644 (筛素数 + 二分) Prime Gap
    UVa 10048 (Floyd变形) Audiophobia
    UVa 247 (传递闭包) Calling Circles
    UVa 808 (建坐标系、找规律) Bee Breeding
    UVa 1151 (枚举 + MST) Buy or Build
    UVa 1395 (最小生成树) Slim Span
    UVa 11040 (水题) Add bricks in the wall
  • 原文地址:https://www.cnblogs.com/HKUI/p/3577222.html
Copyright © 2020-2023  润新知