Mysql列的完整性约束详解(设置表字段的外键约束(FOREIGN KEY,FK))

目录

前言

一、设置表字段的外键约束(FOREIGN KEY,FK)

1.简介

2.语句格式

总结


前言

        外键是表的一个特殊字段,外键约束是为了保证多个表(通常为两个表)之间的参照完整性,即构建两个表的字段之间的参照关系。

        设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。例如,表示一个班级和学生关系,即每个班级有多个学生。首先应该有两个表:班级表和学生表,然后学生表有一个表示班级编号的字段no,其依赖于班级表的主键,这样字段no就是学生表的外键,通过该字段班级表和学生表建立了关系。


提示:以下是本篇文章正文内容,下面案例可供参考

一、设置表字段的外键约束(FOREIGN KEY,FK)

1.简介

  • 一个班级表:

ID

名称

班主任

101

六年级一班

tiger老师

102

六年级二班

王老师

班级表主键 <ID>

每一行对应着一个班级,而一个班级对应着多个学生,所以班级表和学生表的关系就是“一对多”:

ID

姓名

班级ID

性别

年龄

1

小花

101

M

9

2

小红

102

F

8

3

小军

102

M

8

4

小白

101

F

9

班级表<ID> 为学生表<班级ID >的外键

        在具体设置FK约束时,设置FK约束的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为空(NULL)。

2.语句格式

        设置表中某字段的FK约束非常简单,可以在MySQL数据库管理系统中通过SQL语句FOREIGN KEY来实现,其语法形式如下:

CREATE TABLE tablename_1( 

    propName1 propType ,

    propName2 propType ,

    ......                    

[CONSTRAINT fk_name] FOREIGN KEY(propName1) REFERENCES table2_name(table2_column)

);

        其中,tablename_1参数是要设置外键的表名,propName1参数是要设置外键的字段,table2_name是父表的名称,table2_column是父表中设置主键约束的字段名。

mysql> use school;   #选择数据库school

mysql> create table class(id int PRIMARY KEY, name varchar(128), teacher varchar(64));         #创建表class

mysql> desc class ;  #查询表class 的定义, describe class 效果等同

mysql> create table student (id int PRIMARY KEY AUTO_INCREMENT, name varchar(64) NOT NULL, class_id int, sex enum('M','F'), FOREIGN KEY(class_id) REFERENCES class(id) );  #创建表student, class_id 为表class id 字段的外键

mysql> insert into student(name, class_id, sex) values('小红', 2, 'M');   #插入记录,主键自增长

mysql> insert into student(name, sex) values('小军', 'M');   #插入记录,允许外键为空


总结

设置外键的格式:

create table 表名( 字段名  类型名,...... foreign  key(要设置成外键的字段名)  references  主键表名(外键依附表的主键名);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的鱼-blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值