主键与外键

简介: 主键与外键

主键(PRIMARY KEY) 主键(PRIMARY KEY)”的完整称呼是“主键约束”,主键约束即在表中定义一个主键来唯一确定表中每 一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键 应该遵守下面的规则: • 每个表只能定义一个主键。 • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是 唯一性原则。 • 一个列名只能在复合主键列表中出现一次。 • 复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯 一性原则,那么这个复合主键是不正确的。这是最小化原则。


外键约束(FOREIGN KEY) MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可 以有一个或多个外键。 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中 主键的某个值。 外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有 关联关系的行。 外键的主要作用是保持数据的一致性、完整性。例如,用户表 tb_user 的主键是 id,在地址表 tb_address 中 有一个键 userid与这个 id 关联。 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的 表就是主表。 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。


定义一个外键时,需要遵守下列规则: • 外键要存在,首先必须保证表的引擎是 InnoDB(默认的存储引擎)。 • 父表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则父表与子表是同一 个表,这样的表称为自参照表,这种结构称为自参照完整性。 • 必须为父表定义主键。 • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键 中,这个外键的内容就是正确的。 • 在父表的表名后面指定列名或列名的组合。这个列或列的组合必须是父表的主键或候选键。 • 外键中列的数目必须和父表的主键中列的数目相同。 • 外键中列的数据类型必须和父表主键中对应列的数据类型相同。 • 如果外键约束模式选择SET NULL ,那么字段必须允许为NULL。


目录
相关文章
|
安全 数据库
通过E-R理解 主键和外键的关系
实例 现有课程和教师两个实体,课程实体的属性有课程名称、课程编号、课程属性、考试类型;教师实体的属性包括姓名、工号、职称;一门课程可以有多个教师,且每一位教师可以教授多门课程。教师每教授一门课有课序号。
6668 1
通过E-R理解 主键和外键的关系
|
机器学习/深度学习 传感器 数据采集
阿里云天池大赛赛题解析——机器学习篇-赛题一(1)
阿里云是国内知名的云计算、大数据、人工智能技术型公司,是阿里巴巴集团最重要的技术部门。阿里云天池是阿里云面向开发者和教育行业的资源输出部门,天池大赛是国内最大规模的人工智能算法赛事,致力于汇聚全球AI精英为企业解决真实问题。自2014年至今已举办数十次行业顶级算法赛事,全球参赛开发者超过30万人。然而对于更广大的普通开发者和大学生群体来说,高规格的算法大赛仍然具有很高的门槛。本书就是针对受众最广泛的新手人群而编写的,精选阿里巴巴最典型的人工智能算法应用案例,邀请天池大赛最顶级的获奖选手联合编撰,公开那些鲜为人知的技术秘籍,力图使每一个涉足数据智能算法技术的开发者从中获益......
阿里云天池大赛赛题解析——机器学习篇-赛题一(1)
|
C语言
介绍c语言中的分支,循环
介绍c语言中的分支,循环
124 0
|
消息中间件 监控 测试技术
惊呆了!Python性能测试高手都用这些神器:JMeter+Locust,效率翻倍📈
【9月更文挑战第8天】在软件开发中,性能测试对确保应用稳定性和高效运行至关重要。对于Python开发者而言,选择合适的性能测试工具能显著提升测试效率并精准定位性能瓶颈。本文深入探讨了JMeter和Locust这两款工具的独特优势。JMeter作为跨平台的性能测试工具,支持多种协议,具备高度可定制性和扩展性;而Locust则专为Python应用设计,利用协程实现高并发,提供实时监控和分布式测试功能。两者结合使用,可在实际项目中实现1+1>2的效果,帮助开发者构建全面高效的测试方案,保障应用稳定运行。
790 1
|
机器学习/深度学习 开发者 Python
【科学计算包NumPy】NumPy数组的创建
【科学计算包NumPy】NumPy数组的创建
203 4
|
SQL XML JavaScript
【若依Java】15分钟玩转若依二次开发,新手小白半小时实现前后端分离项目,springboot+vue3+Element Plus+vite实现Java项目和管理后台网站功能
摘要: 本文档详细介绍了如何使用若依框架快速搭建一个基于SpringBoot和Vue3的前后端分离的Java管理后台。教程涵盖了技术点、准备工作、启动项目、自动生成代码、数据库配置、菜单管理、代码下载和导入、自定义主题样式、代码生成、启动Vue3项目、修改代码、以及对代码进行自定义和扩展,例如单表和主子表的代码生成、树形表的实现、商品列表和分类列表的改造等。整个过程详细地指导了如何从下载项目到配置数据库,再到生成Java和Vue3代码,最后实现前后端的运行和功能定制。此外,还提供了关于软件安装、环境变量配置和代码自动生成的注意事项。
28829 73
|
安全 网络安全 iOS开发
macOS系统安装NMAP扫描工具
macOS系统安装NMAP扫描工具
745 1
|
网络协议 Windows
纯IPv4环境访问IPv6网站
在纯IPv4环境中访问IPv6网站,可以通过Teredo协议。适用于Windows 10 19043.928版。操作包括:检查Teredo状态、设置为不可用或企业客户端、指定服务器(如teredo.iks-jena.de)、配置端口(可选),然后验证通过ping IPv6地址(如6.ipw.cn)来确认功能是否正常。
8177 0
|
Java 数据库连接 项目管理
项目管理问题之什么是好的设计
项目管理问题之什么是好的设计

热门文章

最新文章