【SQL 新手教程 3/20】关系模型 -- 外键

news2024/9/20 20:27:01

💗 关系数据库建立在关系模型上⭐ 关系模型本质上就是若干个存储数据的二维表

记录 (Record): 表的每一行称为记录(Record),记录是一个逻辑意义上的数据
字段 (Column):表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段

  • 字段定义了数据类型,及是否允许为NULL(NULL表示字段数据不存在)
idclass_idnamegenderscore
11小明M90
21小红F95
  • 外键(字段):通过外键,可以把数据与 另一张 表关联起来
    • 上述为以 id 为主键 的 students 表,可以通过外键 class_idclasses 表关联起来 (一对多关系:一个 classes 的记录对应多个 students 的记录)

    • 示例:小明 (小红) 的 class_id1,因此,对应的 classes 表的记录是 id=1 的一班,下方为 class 表示例:

      idname
      1一班
      2二班

外键并不是通过列名实现的,而是通过定义外键约束实现的:

ALTER TABLE students			/* 通过 ALTER TABLE 实现 */
ADD CONSTRAINT fk_class_id 		/* 外键约束的名称 fk_class_id 可以任意 */
FOREIGN KEY (class_id)			/* 指定 class_id 作为外键 */
REFERENCES classes (id);		/* 指定该外键将关联到 classes 表的 id 列*/

DROP FOREIGN KEY fk_class_id;	/* 删除外键约束,不会删除外键对应列 */

通过定义外键约束,关系数据库可以保证无法插入无效的数据

  • 即如果 classes 表不存在 id=99 的记录,students 表就无法插入 class_id=99 的记录
  • 也可以不设置约束,仅依靠应用程序的逻辑来保证
  • 关系数据库通过外键可以实现一对多 (本文示例)、多对多和一对一的关系

欢迎关注 、订阅专栏 【SQL 新手教程】谢谢你的支持!💜💜
参考资料:廖雪峰的官方网站 – SQL 教程

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

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

相关文章

Buildroot 构建 Linux 系统

Buildroot 是一个工具,以简化和自动化为嵌入式系统构建完整 Linux 系统的过程。使用交叉编译技术,Buildroot 能够生成交叉编译工具链、根文件系统、Linux 内核映像和针对目标设备的引导加载程序。可以独立地使用这些选项的任何组合,例如&…

Vitis AI 使用 VAI_Q_PYTORCH 工具

目录 1. 简介 2. 资料汇总 3. 示例解释 3.1 快速上手示例 4. 总结 1. 简介 vai_q_pytorch 是 Vitis AI Quantizer for Pytorch 的缩写,主要作用是优化神经网络模型。它是 Vitis AI 平台的一部分,专注于神经网络的深度压缩。 vai_q_pytorch 的作用…

大数据管理中心设计规划方案(可编辑的43页PPT)

引言:随着企业业务的快速发展,数据量急剧增长,传统数据管理方式已无法满足高效处理和分析大数据的需求。建立一个集数据存储、处理、分析、可视化于一体的大数据管理中心,提升数据处理能力,加速业务决策过程&#xff0…

Spring Boot:图书管理系统(一)

1.编写用户登录接口 代码: package com.example.demo;import jakarta.servlet.http.HttpSession; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotatio…

HarmonyOS和OpenHarmony区别联系

前言 相信我们在刚开始接触鸿蒙开发的时候经常看到HarmonyOS和OpenHarmony频繁的出现在文章和文档之中,那么这两个名词分别是什么意思,他们之间又有什么联系呢?本文将通过现有的文章和网站内容并与Google的AOSP和Android做对比,带…

Vue.js 2 项目实战(五):水果购物车

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计目标是通过采用易于上手的结构和强大的功能,使前端开发变得更加简便和高效。以下是 Vue.js 的一些关键特性和优点: 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&a…

AI周报(7.21-7.27)

AI应用-一款能提供情绪价值的智能鸟类喂食器(Bird Buddy) 图像识别技术:Bird Buddy装备了图像识别技术,能够识别超过1000种鸟类,涵盖了常见的鸟类品种。这种技术能够在鸟类经过时,通过内置麦克风捕捉的声音…

PID 控制实验 - 整定实验

Arduino PID Arduino-PID-LibraryArduino-PID-AutoTune-Library PID控制实验 – 制作测试台 PID Control Experiment – Making the Testing Rig PID (Proportional, Integral, Derivative) control is a classic control algorithm that I have used for a few projects,…

Debug-018-elementUI-el-tree中通过CSS隐藏任意一项的选择框checkbox

前情提要: 我们项目中使用的是elementUI,业务中经常需要使用到el-tree组件去实现一些有层级关系的功能。现在有一个需求描述一下:首先是这个el-tree是个有checkbox的树,每一子节点都可以被选择,用于去实现一些系统的权…

Shell编程之正则表达式与文本三剑客

目录 一、正则表达式 1.引言--什么是正则表达式 1.1正则表达式的功能 2.基础正则表达式(BRE) 2.1特殊字符 2.2定位符 2.3非打印字符 3.扩展正则表达式(ERE) 4.元字符操作的案列 二、命令小工具 1.cut:列截取工具 2.sort排序 …

vue3获取、设置元素高度

前言 在web端常见的需求场景中,会经常遇到table表格需要根据页面可视区域使高度自适应的情况。 傻喵(作者本人)昨天在尝试使用vue3实现这个需求时,看了几篇网上写的回答,都不太全面,所以干脆自己写个总结吧.(第一次写&#xff0c…

深入探讨 I/O 多路复用:提升系统 I/O 效率的关键技术

摘要 I/O(输入/输出)操作是计算机系统中不可或缺的一部分,而 I/O 多路复用技术则是提高系统 I/O 效率的重要手段。本文将浅谈 I/O 的基本概念,重点探讨 I/O 多路复用技术的原理、优势以及在现代系统中的应用。 引言 在现代计算…

php收银系统源码-收银员操作权限

收银系统是很多门店,尤其是连锁门店营业的必备工具,收银员每天需要通过收银系统记录商品的售卖数量,以及收款,会员开卡,核销订单等工作。但很多门店都不希望给收银员太高的权限,自然就离不开收银员的权限管…

flask开启调试模式,热部署

这里写自定义目录标题 功能快捷键 什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署(抄的)…

NameSilo域名注册和解析2024版教程(附优惠码)

上次给大家介绍了国外知名的域名注册商Dynadot,今天再给大家分享另一家国外知名的域名注册商NameSilo,同样性价比很高。使用本站提供的优惠码:ieearn.com,你还可以在首次注册购买域名时享受1美元的优惠: NameSilo简介…

10 VUE Element

文章目录 VUE1、概述2、快速入门3、Vue 指令4、生命周期5、案例 Elemant1、快速入门2、Element 布局3、常用组件-案例 VUE 1、概述 Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写基于MVVM(Model-View-ViewModel)思想,实现数据…

AI机器人本地免费部署(部署Llama 3.1详细教程)

昨日,Meta公司发布了人工智能模型——Llama 3.1。 那么Llama 3.1 405B的效果怎么样?我们来对比一张图,横向对比一下GPT-4。 可以看出,Llama 3.1 405B在各类任务中的表现可以与GPT-4等顶级的模型相差无几。 那么,我们…

4G新型智能电表是什么?

4G新型智能电表是一种利用第四代移动通信技术(4G)进行数据传输的先进计量设备。它不仅具备传统电表的基本功能,如电量计量,还能实现远程抄表、用电监控、故障检测等多种智能化服务。本文旨在详细介绍4G新型智能电表的技术特点、优势及应用场景。 一、4G…

【C++刷题】优选算法——队列+宽搜

N 叉树的层序遍历 vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret;if (root nullptr) return ret;queue<Node*> q;q.push(root);ret.push_back({root->val});int size 1;while (!q.empty()) {vector<int> v…

03。正式拿捏ArkTS语言第一天

1, 打印日志命令 &#xff1a; console.log() 2, 三种基本数据类型&#xff1a; number 数字类型 &#xff08;数字&#xff09; string 字符串类型&#xff08;例如&#xff1a;“我是字符串”&#xff09; boolean 布尔类型 (true 或者 false) ***…