SQL | 主键(Primary Key)和外键(Foreign Key)有什么区别| 用一个简单例子说明

如是我闻: 主键(Primary Key)和外键(Foreign Key)是确保数据完整性的两个基本概念,下面我们尝试用一个形象的例子来理解这两个概念。

基本定义

  1. 主键(Primary Key)

一个主键是一个或一组列,其值能够唯一标识数据库表中的每一行。主键具有以下特性:

•	唯一性:每个表中的主键值必须唯一。这意味着没有两行可能具有相同的主键值。
•	非空:主键列不能有空值(NULL),这确保了每一行都可以被有效地识别和引用。

主键的目的是为表中的每一行提供一个唯一的标识符,确保数据表中的每一条记录都可以被精确访问。

  1. 外键(Foreign Key)

一个外键是一个表中的列,它链接到另一个表的主键。外键用于建立和维护两个数据表之间的关系,确保数据的一致性和完整性。外键具有以下特性:

•	参照完整性:外键值必须匹配它指向的那个表(参照表)的主键列中的一个值,或者是空值(NULL)。
•	关系链接:通过外键,一个表中的行可以引用另一个表中的行,这是实现关系数据库中数据关联的关键机制。

外键的主要作用是控制不同表中数据之间的关系,防止数据库中出现不一致的数据,例如,防止引用不存在的数据。

例子参照

主键(Primary Key)

想象在学校里,每个学生都有一个独一无二的学号。这个学号是特别的,因为它帮助老师和同学们确认每个学生的身份,没有两个学生会有相同的学号。

在 SQL 中,主键就像是学生的学号。它是数据库表中的一个特殊列(或一组列),用来唯一标识表中的每一行记录。没有两行会有相同的主键值,这样我们就可以确保每条记录都是独特的。

外键(Foreign Key)

现在想象每个学生都属于一个班级,班级有自己的班级号码。学生们的记录中会包含他们班级的号码,这样我们就知道他们属于哪个班级。

在 SQL 中,外键就像是学生记录中的班级号码。外键是数据库中一个表的列,它链接到另一个表的主键。通过外键,我们可以连接两个表的数据。例如,如果我们有一个名为 Students 的表和一个名为 Classes 的表,Students 表中的 ClassID 列可能是一个外键,它指向 Classes 表的主键,告诉我们每个学生属于哪个班级。

总结

•	主键:就像每个学生的独特学号,用来识别每个学生。
•	外键:就像学生用来表示班级隶属的班级号码,帮助关联和理解学生属于哪个班级。

非常的有品

以上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb系列十七: jQuery选择器 上

jQuery选择器 jQuery基本选择器jquery层次选择器基础过滤选择器内容过滤选择器可见度过滤选择器 选择器是jQuery的核心, 在jQuery中, 对事件处理, 遍历 DOM和Ajax 操作都依赖于选择器jQuery选择器的优点 $(“#id”) 等价于 document.getElementById(“id”);$(“tagName”) 等价…

CMMI认证等级是如何划分的?

CMMI(Capability Maturity Model Integration)认证等级是根据组织在软件开发和维护过程中的成熟度水平进行划分的。它一共包含五个级别,每个级别都代表了不同的过程成熟度和组织能力。以下是CMMI认证等级的详细划分: 初始级&…

Linux 日志文件

Linux 日志文件 在 Linux 系统中,日志文件是记录系统和应用程序运行状态、错误信息、用户活动等重要数据的文件。通过分析日志文件,管理员可以监控系统的健康状况、诊断问题、追踪安全事件以及了解系统的使用模式。 常见的 Linux 日志文件 /var/log/mes…

Java中double类型数据进行运算的时候出现精度丢失问题

精度丢失通常发生在浮点数运算中。以下是几个常见的例子展示了浮点数精度丢失的现象: 示例 1: 简单加减法中的精度丢失 在某些情况下,浮点数的简单加减法会产生意想不到的结果。 public class PrecisionLossExample {public static void main(String…

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术,可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法,特别适合于展示变量之间的相关性,对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先,确保你已经安装了matplotlib…

收银系统源码-千呼新零售【分销商城】

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

水位自动监测摄像机

随着科技的不断进步,水位自动监测摄像机作为现代智能监控技术的重要应用,正在广泛应用于水利工程、防洪管理和环境监测等领域,显著提升了监测效率和数据准确性。水位自动监测摄像机利用高精度摄像头和先进的图像处理技术,能够实时…

鸿蒙系统——强大的分布式系统

鸿蒙相比较于传统安卓最最最主要的优势是微内核分布式操作系统,具有面向未来,跨设备无缝协作,数据共享的全场景体验。下面简单来感受一下鸿蒙系统的多端自由流转。 自由流转概述 场景介绍 随着全场景多设备的生活方式不断深入,…

Python处理word的常用操作详解

Python 处理 Word 文档通常使用 python-docx 库。以下是一些常用的操作和相应的代码示例: 这些是使用 python-docx 库处理 Word 文档时的一些常用操作。根据你的具体需求,可能还需要探索更多的功能和方法。在使用这些功能之前,请确保已经安装…

解释什么是lambda函数?它有什么好处?

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

深度解密Spark性能优化之道

课程介绍 课程通过实战案例解析和性能调优技巧的讲解,帮助学员提升大数据处理系统的性能和效率。课程内容涵盖了Spark性能调优的各个方面,包括内存管理、并行度设置、数据倾斜处理、Shuffle调优、资源配置等关键技术和策略。学员将通过实际案例的演示和…

线性代数知识点搜刮

求你别考太细... 目录 异乘变零定理 行列式转置 值不变 重要关系 中间相等,取两头 特征值公式 向量正交 点积为0 拉普拉斯定理 矩阵的秩 特征值和特征向量 |A|特征值的乘积 & tr(A)特征值的和 要记要背 增广矩阵 异乘变零定理 某行(…

【面试干货】Object 类中的公共方法详解

【面试干货】Object 类中的公共方法详解 1、clone() 方法2、equals(Object obj) 方法3、hashCode() 方法4、getClass() 方法5、wait() 方法6、notify() 和 notifyAll() 方法 💖The Begin💖点点关注,收藏不迷路💖 在 Java 中&#…

报工计件工资核算h5开源版开发

报工计件工资核算h5开源版开发 小型计件工资管理系统,支持后台制定工价,核算工资。支持员工H5端报工,和查看工资情况。 H5手机端 支持在线报工,支持查看我的工资。 自定义费用项 在基础计件工资基础上增加扣除和增加项&#xff…

Spring Boot中 CommandLineRunner 与 ApplicationRunner作用、区别

CommandLineRunner 和 ApplicationRunner 是 Spring Boot 提供的两种用于在应用程序启动后执行初始化代码的机制。这两种接口允许你在 Spring 应用上下文完全启动后执行一些自定义的代码,通常用于执行一次性初始化任务,如数据库预填充、缓存预热等。 Co…

基于Vue.js的电商前端模板:Vue-Dashboard-Template的设计与实现

摘要 随着电子商务的飞速发展,前端页面的设计和实现变得愈发重要。本文介绍了一个基于Vue.js的电商前端模板——Vue-Dashboard-Template,旨在提供一个高性能、易扩展的电商平台前端解决方案。该模板遵循响应式设计、模块化、组件化开发等设计原则&#…

Python面试宝典第1题:两数之和

题目 给定一个整数数组 nums 和一个目标值 target,找出数组中和为目标值的两个数的索引。可以假设每个输入只对应唯一的答案,且同样的元素不能被重复利用。比如:给定 nums [2, 7, 11, 15] 和 target 9,返回 [0, 1],因…

c++指针和引用之高难度(一)习题讲解

1.【单选题】 int a { 5000 }; int* ptrA { &a }; a; *ptrA ? A 5000 B 5001 C 5002 解析:ptrA是指向变量a的内存地址,变量a,解引用ptrA的值也会变化,结果为5001。 2.【单选题】 int a { 5000 }; c…

Python爬虫开发实战,模拟登录与验证码处理

在Python爬虫的开发过程中,模拟登录和验证码处理是两个重要的环节。模拟登录可以帮助我们获取需要用户身份认证才能访问的数据,而验证码处理则是绕过网站反爬虫机制的关键步骤。本文将从实战角度出发,详细阐述Python爬虫中模拟登录和验证码处理的技术和策略。 一、模拟登录 …

axios二次封装(详细+跨域问题)

一,为什么要对axios进行二次封装?答:主要是要用到请求拦截器和响应拦截器;请求拦截器:可以在发请求之前可以处理一些业务响应拦截器:当服务器数据返回以后,可以处理一些事情 二,axios的二次封装…