zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结v2
    JS设置cookie、读取cookie、删除cookie
    Atitit 图像处理30大经典算法attilax总结
    Atitit数据库层次架构表与知识点 attilax 总结
    Atitit 游戏的通常流程 attilax 总结 基于cocos2d api
    Atitti css transition Animation differ区别
    Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结
    Atitit 全屏模式的cs桌面客户端软件gui h5解决方案 Kiosk模式
    Atitit 混合叠加俩张图片的处理 图像处理解决方案 javafx blend
    Atitit  rgb yuv  hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别
  • 原文地址:https://www.cnblogs.com/HKUI/p/3577222.html
Copyright © 2011-2022 走看看