PHP-mysql关系

自然界中实体与实体之间的联系如何在数据库中进行体现。


多对一/一对多

1.需求:有一个学生表一张班级表
一个学生只属于一个教室,一个教室却包含多个学生。这种关系就称之为多对一或者一对多的关系
这里写图片描述


多对多

2.需求:有一个教师表和一个学生表
一个学生被多个老师教过,一个老师教过多个学生,这个关系就称之为多对多的关系
这里写图片描述


一对一

3.需求:一个学生信息,有10种信息,其中只有5个信息是非常常用的,其他5个信息基本上用不上(婚姻状况,籍贯,国籍)。
将一个表中常用的数据和不常用的数据分离开来,分别保存,但是使用同样的id进行管理。
这里写图片描述


外键约束

维护一个学生与班级的关系
这里写图片描述

外键定义:外键就是指的是一个表中某个字段的值指向另外一个表的主键。


增加外键

在一张表中创建一个字段,该字段指向另外一张表的主键。通过一定的约束语句来指明其联系。

外键规则:
1.外键的字段类型与被指向的表的主键的字段类型一致
2.如果想要实现on delete set null,外键字段必须可以为空

1.可以通过在创建表的时候,指定对应的外键
语法:foreign key(当前表中的外键字段) references 外键指向的表(外键指向表的主键);
这里写图片描述

查看表结构
这里写图片描述

查看表创建语句
这里写图片描述

2.修改表的结构增加外键(指定外键名字)
alter table 表名 add constraint 外键名 foreign key(字段) references 父表(主键)
前提:子表中没有父表中不存在的值
这里写图片描述


外键的作用

父表:外键所指向的那张表称之为父表
子表:外键所在的表就是子表

外键的作用主要是用来约束外键所在表的数据的操作以及外键所指向的表的操作

1.一旦一张表有一个外键字段,那么该表外键字段值,就不能是外键所指向的表中的主键的值之外的值
这里写图片描述

2.约束外键所指向的表的操作(父表不能更新和删除)
这里写图片描述

实际约束
这里写图片描述

修改外键:外键不能被修改,只能先删除后增加


删除外键

一张表中可能存在多个外键,所以在删除外键的时候,必须指定外键名称。
语法:alter table 表名 drop foreign key 外键名字
这里写图片描述


修改外键作用

修改外键的约束作用,修改外键对父表的操作约束。
默认的,对父表的约束操作是不允许删除和更新。

修改外键对父表的约束
   置空:set null,当父表进行更新或者删除的时候,对应的子表里的数据应该被设置成null
   级联:cascade,当父表进行更新或者删除的时候,对应的子表里的数据应该被删除或者被更新

删除:父表删除有约束记录的时候子表怎么办?
   将子表的外键值设置为null(保证子表的外键字段是允许为空)
  
更新:父表更新有约束记录的时候子表怎么办?
   将子表的外键值,级联更新

在增加外键的时候指定约束方式。
on delete set null on update cascade:当父表删除记录时,子表置空,当父表更新记录时子表跟着更新
这里写图片描述

约束效果
这里写图片描述


外键的优缺点

优点:从数据库管理者出发
1.能够保证数据的一致性(父表修改之后,子表跟着修改)
2.保证数据的安全性(不允许在子表中增加父表中不存在的值)
3.将表与表之间的关心进行了关联(体现了关系型数据库)

从开发者出发
4.增加了维护的难度

实际开发中,一般会使用外键字段,但是不使用外键约束。通过程序来实现表与表之间的关系维护。

外键:更新班级id,对应的学生的班级id也改变

不使用外键:更新班级ID,得到新的班级id和旧的班级id,通过旧的班级id去修改学生的班级id为新的。

外键作用简析
这里写图片描述

猜你喜欢

转载自blog.csdn.net/lwzhang1101/article/details/80282768