列的完整性约束——设置表字段的外键约束(FOREIGN KEY,FK)
文章目录
前言
外键是表的一个特殊字段,外键约束是为了保证多个表(通常为两个表)之间的参照完整性,即构建两个表的字段之间的参照关系。
设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。例如,表示一个班级和学生关系,即每个班级有多个学生。首先应该有两个表:班级表和学生表,然后学生表有一个表示班级编号的字段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 主键表名(外键依附表的主键名);
posted on 2022-11-20 19:00 会飞的鱼-blog 阅读(85) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现