首页 > 数据库技术 > 详细

mysql实体关系(mysql学习五)

时间:2014-03-03 16:17:58      阅读:587      评论:0      收藏:0      [点我收藏+]

实体关系

 表设计

1:1

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

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

bubuko.com,布布扣

优化上称为垂直分割

1n

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

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

bubuko.com,布布扣

 

M:n

多对多

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

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

bubuko.com,布布扣

bubuko.com,布布扣

外键 foreign key

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

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

bubuko.com,布布扣

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

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

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

作用:

约束处于关系内的实体

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

定义一个外键

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

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

bubuko.com,布布扣

 

 

 

建完表后插入

bubuko.com,布布扣

bubuko.com,布布扣

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

bubuko.com,布布扣

bubuko.com,布布扣

 

设置级联操作

 

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

 

主表更新

 

主表删除

 

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

 

允许的级联操作:

 

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

 

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

 

 Restrict :拒绝主表的相关操作

 

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

 

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

 

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

 

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

bubuko.com,布布扣

 

bubuko.com,布布扣

新建外键:

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

 On delete set null

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

bubuko.com,布布扣

 

bubuko.com,布布扣

bubuko.com,布布扣

class_id定义时要能为null

bubuko.com,布布扣

bubuko.com,布布扣

 

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

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

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

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

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

mysql实体关系(mysql学习五),布布扣,bubuko.com

mysql实体关系(mysql学习五)

原文:http://www.cnblogs.com/HKUI/p/3577222.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!