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

简介: 列的完整性约束——设置表字段的外键约束(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  主键表名(外键依附表的主键名);

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
消息中间件 负载均衡 监控
【ZMQ PUB模式指南】深入探究ZeroMQ的PUB-SUB模式:C++编程实践、底层原理与最佳实践
【ZMQ PUB模式指南】深入探究ZeroMQ的PUB-SUB模式:C++编程实践、底层原理与最佳实践
3949 1
|
8月前
|
数据采集 搜索推荐 数据可视化
六大电子表单工具深度对比:选对表单工具,告别低效
本文将深入分析对比金数据、腾讯问卷、草料二维码等电子表单工具功能、应用场景、优劣势上的差异,希望能为数字化转型关口的中小企业,提供一份更具参考价值的指南
六大电子表单工具深度对比:选对表单工具,告别低效
|
8月前
|
人工智能 自然语言处理 算法
经典大模型提示词工程技术路线概述
本文概述几种经典提示词工程方法,总结关键信息,分析其优势和局限,并分享笔者的一点思考。
786 105
经典大模型提示词工程技术路线概述
|
机器学习/深度学习 数据可视化 网络架构
增强深度学习模型的可解释性和泛化能力的方法研究
【8月更文第15天】在深度学习领域,模型的准确率和预测能力是衡量模型好坏的重要指标。然而,随着模型复杂度的增加,它们往往变得越来越难以理解,这限制了模型在某些关键领域的应用,例如医疗诊断、金融风险评估等。本文将探讨如何通过几种方法来增强深度学习模型的可解释性,同时保持或提高模型的泛化能力。
1405 2
|
人工智能 前端开发
大模型体验体验报告:OpenAI-O1内置思维链和多个llm组合出的COT有啥区别?传统道家理论+中学生物理奥赛题测试,名不虚传还是名副其实?
一个月前,o1发布时,虽然让人提前体验,但自己并未进行测试。近期终于有机会使用,却仍忘记第一时间测试。本文通过两个测试案例展示了o1的强大能力:一是关于丹田及练气的详细解答,二是解决一道复杂的中学生物理奥赛题。o1的知识面广泛、推理迅速,令人印象深刻。未来,或许可以通过赋予o1更多能力,使其在更多领域发挥作用。如果你有好的测试题,欢迎留言,一起探索o1的潜力。
513 1
|
应用服务中间件 API nginx
使用正则表达式实现 Nginx 代理
【10月更文挑战第19天】在不断发展的互联网技术中,掌握正则表达式在 Nginx 代理中的应用是非常重要的。不断探索和实践,将有助于我们在实际工作中更好地运用这一技术,提升项目的质量和效率。
|
存储 关系型数据库 MySQL
【MySQL】1-深入理解MySQL的索引机制
【MySQL】1-深入理解MySQL的索引机制
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
286 7
|
XML Java 关系型数据库
springboot 集成 mybatis-plus 代码生成器
本文介绍了如何在Spring Boot项目中集成MyBatis-Plus代码生成器,包括导入相关依赖坐标、配置快速代码生成器以及自定义代码生成器模板的步骤和代码示例,旨在提高开发效率,快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。
springboot 集成 mybatis-plus 代码生成器