mysql外键约束

外键约束

维护一个学生与班级的关系

 

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

 

增加外键

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

1.      可以在通过创建表的时候,指定对应的外键

语法:foreign key(当前表中的外键字段)reference 外键指向的表(外键指向表的主键)

 

 

查看表结构

 

 

查看表创建语句

修改表的结构增加外键(指定外键名字)

Alter table 表名 add constraint 外键名foreign key(字段)references 父表(主键)

前提:字表中没有父表中不存在的值

外键的作用

父表:外键所指向的那张表称为父表

字表:外键所在的表

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

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

 

不能在表中增加一个在主键表里不存在的值这样的一条记录

 

2.      约束外键所指向的表的操作(父表不能更新和删除)

 

不能删除或者更新父表的行,因为改行被字表所引用

 

实际约束

 

外键对父表的约束只存在已经被指向的记录,其它没有被指向的记录可以随意被操作

 

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

删除外键

一张表中可能存在多个外键,所以在删除外键的时候,必须指定外键名称.

语法:alter table 表名 drop foreign key 外键名字

删除之会删除外键对应信息,索引不会被删掉

 

修改外键作用

修改外键的约束作用,修改外键对父表的操作约束。

 

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

 

修改外键对父表的约束

     置空:set null 当父表就行更新或者删除的时候,对应的子表里面的数据应该被设置成null

     级联:cascade,当父表进行更新或者删除的时候,对应的子表里的数据应该被删除或者被更新

删除:父表删除有约束记录的还是子表怎么办?

     将子表的外键值设置为null(保证子表的外键字段运行为空)

更新:父表更新有约束记录的时候子表怎么办?

     将子表的外键值,级联更新

 

在增加外键的时候指定约束方式

On delect set null on update cascade : 当父表删除记录时,子表置空,当父表更新记录时子表跟着更新

 

要想实现置空功能,必须保证外键运行为空

 

外键的级联操作(更新)如果是删除,则子表对应的值变为null

 

 

外键的优缺点

优点:数据库管理者出发

1.      能保证数据一致性(父表修改之后,子表跟着修改)

2.      保证数据的安全性(不允许在子表中增加父表中不存在的值)

3.      将表与表之间的关系进行了关联(提现了关系型数据库)

 

PHP开发者出发

1.      增加了维护的难度

 

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

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

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

 

 

外键作用简析

 

删除父表记录时一定要判断子表是否有指向该记录的数据,如果有的话要处理

                           外键 foreign key(C_id) references 班级表(C_Id) === 效果等价于连接线条

学生表                                      班级表       

S_id

Name

Number

C_id

1

张三

10

1

2

李四

12

2

3

王五

13

3

 

 

 

 

4

哈哈

15

4

C_id

Name

Room

1

PHP

一班

2

JAVA

二班

3

C语言

三班

 

                                               因为外键的约束导致找不到对应的匹配,所以不允许

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值