SQL:Primary Key(主键)和Foreign Key(外键)

目录

1. Key(键)

2. Index(索引)

3.Key和Index的区别

4. Primary Key(主键)

5. Foreign Key(外键)

6.主键和外键的关系

温馨提示: 闪电按钮不同的执行功能

首先,我想先介绍一下简单介绍SQL中的Key(键)和Index(索引)。

1. Key(键)

基本概念

定义:Key是数据库表中用于标识或关联数据的特殊列(或列组合)。它像一个“标签”或“身份证”,帮助数据库管理记录。

通俗解释:想象一个大图书馆,书上有编号(Key),用来快速找到某本书或确认它是唯一的。Key是数据库里给每行数据贴上的“识别码”。

2. Index(索引)

基本概念

定义:Index是数据库为表中的一列(或多列)创建的特殊数据结构,加快数据检索速度。

通俗解释:想象图书馆的书目索引,书按编号排序,查书时不用翻遍所有书架,直接找索引上的页码。Index就像给数据库加了个“快速查找表”。

3.Key和Index的区别

目的:

Key(主键、外键、唯一键)主要用于数据完整性和关系。 

Index主要用于查询优化。 

比喻:Key像身份证和户口簿,Index像图书馆的索引卡。 

4. Primary Key(主键)

什么是主键?

定义:主键是一个表中用来唯一标识每行记录的列或列组合。就像每个人的身份证号码,保证没有重复。

通俗解释:想象一个班级花名册,每个人都有一个唯一的学号(比如001、002),主键就是这个学号,确保找不到两个“张三”混淆。 

特点:

  • 唯一性:每行数据的主键值必须不同。

  • 非空:主键不能是NULL,必须有值。

  • 不可变:一旦设好,主键值一般不该改(改了会影响关联)。

举例说明:

这是一张个人信息表。表中分别有ID,名字,姓氏,性别,电话 。从表中我们可以看到,ID是这张表的主键,因为其他列中都有重复的值。它们的值无效,或者是重复的。

5. Foreign Key(外键)

什么是外键?

定义:外键是表A中的一列(或多列),它的值必须指向表B的主键,建立了两表之间的关系。 

通俗解释:想象一个班级花名册(表A)和成绩表(表B),成绩表里有个“学生ID”列,指向花名册里的“学号”(主键),这样就能知道哪个成绩属于哪个学生。外键就像“关系纽带”。 

特点:

  • 引用性:外键值必须是它所引用的主键值之一,或者是NULL(如果允许)。

  • 关联性:通过外键,多个表可以“联手”管理数据。

带有主键的表称为父表(parent table),带有外键的表称为子表(child table) 。

6.主键和外键的关系

  • 联系:外键依赖主键,外键的值必须来自它引用的表的主键,形成了表之间的“父子关系”。

  • 比喻:主键是“户主”的身份证,外键是“家庭成员”持有的户主身份证号码,靠这个联系起家庭(表)。 

这张表显示了订单,客户,产品之间的关系。这个设计模拟了一个咖啡店的订单系统,客户可以购买产品,订单记录谁买了什么。

箭头的方向显示链接,从父表的主键指向子表的外键。 

箭头表示外键关系: 

orders.customer_id → customers.id:订单指向客户。 

orders.product_id → products.id:订单指向产品。 

SHOW DATABASES;		#显示当前服务器上的所有数据库。CREATE DATABASE coffee_store;	#创建一个名为coffee_store的新数据库。如果已存在则报错USE coffee_store;	#切换到coffee_store数据库中,接下来的操作都在这里CREATE TABLE products(id INT auto_increment PRIMARY KEY, #id是主键(从1开始),INT表示类型#auto_increment表示自动递增,每次有新的记录时,id自动加1#保证每行id唯一且非空,像产品唯一的“产品编号”。name VARCHAR(30),price DECIMAL(3,2)
);CREATE TABLE customers(id INT auto_increment PRIMARY KEY,first_name VARCHAR(30),last_name  VARCHAR(30),gender ENUM('F','M'),phone_number VARCHAR(11)
);CREATE TABLE orders
(id INT auto_increment PRIMARY KEY,products_id INT,customer_id INT,order_time DATETIME,FOREIGN KEY(product_id) REFERENCES products(id),FOREIGN KEY(customer_id) REFERENCES customers(id)#FOREIGN KEY 这是个关键字,告诉数据库下面我要定义一个外键#(customer_id)括号里是外键的列名,在当前表叫customer_id#REFERENCES是个关键字,指customer_id的值要去对应的customers表里找id#customers(id) 分别是参考表的表名和列名#组合起来的意思是在当前表里,customer_id列是外键。它的值必须是customers表中id列的值之一
);SHOW TABLES;	#显示当前数据库中的所有表。

温馨提示: 闪电按钮不同的执行功能

 在 MySQL Workbench 中,工具栏上有三个与执行 SQL 查询相关的闪电按钮(lightning bolt buttons),它们的功能各不相同。

 

1. 第一个闪电按钮 

功能:执行整个 SQL 脚本。 

描述:这个按钮会运行 SQL 查询面板(SQL Query Panel)中当前所有内容,无论你是否选中了特定部分。只要面板中有 SQL 语句,它就会从头到尾执行所有语句。 

2. 第二个闪电按钮 

 功能:执行当前选中的 SQL 语句或高亮部分。

描述:这个按钮只执行你在 SQL 查询面板中手动选中的部分。如果没有选中任何内容,它会执行光标当前所在的单个语句(从光标位置到语句的末尾)。 

使用场景:当你只想测试或运行脚本中的一部分时非常有用。例如,你有一个长脚本,但只想运行其中一个 SELECT 查询。 

3. 第三个闪电按钮 

功能:对当前光标下的语句执行 EXPLAIN 分析。 

描述:这个按钮不会直接执行 SQL 语句,而是生成该语句的执行计划(Execution Plan)。执行计划显示 MySQL 如何执行查询,包括使用的索引、表扫描方式等,帮助你优化查询性能。 

使用场景:

  • 当你想分析某个查询的性能瓶颈或优化 SQL 语句时,使用这个按钮。

  • 例如,如果你怀疑某个 SELECT 查询运行缓慢,可以用 EXPLAIN 检查它是否使用了正确的索引。

4.手形按钮 

 

功能:停止执行的查询。 如果你正在运行一个查询,该查询正在检索成千上万的数据,它可以停止查询而不是继续等待。

应用场景:只在查询时才有效,如果正常状态下点击,不会有任何事发生。

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

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

相关文章

2025年- H1-Lc109-160. 相交列表--java版

1.题目描述 2.思路 “双指针切换链表头” 思路一:双指针路径对齐 while (pA ! pB) { pA (pA null) ? headB : pA.next; pB (pB null) ? headA : pB.next; } 让两个指针走相同的总路径长度! 设: 链表 A 独有部分长度是 lenA 链表 B …

PyTorch 深度学习 || 6. Transformer | Ch6.3 Transformer 简单案例

1. 简单案例 这个代码是一个简单的 Transformer 模型的实现,这个例子展示了一个基本的序列到序列(seq2seq)任务,比如将一个数字序列转换为另一个数字序列。可以用于学习和理解 Transformer 的基本结构和工作原理。 import torch import torch.nn as nn import math# 位置…

基础算法篇(4)(蓝桥杯常考点)—数据结构(进阶)

前言 这期将会讲到基础算法篇里面的数据结构(进阶),主要包括单调栈,单调队列,并查集,扩展域并查集,带权并查集,字符串哈希,Trie树。 数据结构(进阶)正文 单…

【AI学习】初步了解Gradio

Gradio 是一个开源的 Python 库,专注于快速构建交互式 Web 界面,特别适用于机器学习模型、数据科学项目或任意 Python 函数的演示与部署。它通过极简的代码实现前后端一体化,无需前端开发经验即可创建功能丰富的应用。以下是 Gradio 的核心特…

Overleaf 论文提交 Arxiv

Contents References 清除 Overleaf 中所有编译 error,并且保证 main.tex 文件在 project 最上层参考文件 .bib 转 .bbl. project 编译成功后可以在 Overleaf 的 Recompile 按钮右侧找到 “Logs and output files”,点进去之后右下角可以点开 “Other lo…

【Android Audio】Parameter Framework - pfw

Parameter Framework - Android AudioPolicy Engine 使用 libengineconfigurable.so 来取缔默认安卓音频引擎 libenginedefault.so,因为默认安卓音频引擎是通过代码来决定策略,然而 libengineconfigurable 采用读取pfw类型的文件来实现音频策略配置。 …

服务器虚拟化技术深度解析:医药流通行业IT架构优化指南

一、服务器虚拟化的定义与原理 (一)技术定义:从物理到虚拟的资源重构 服务器虚拟化是通过软件层(Hypervisor)将物理服务器的CPU、内存、存储、网络等硬件资源抽象为逻辑资源池,分割成多个相互隔离的虚拟机…

babel-runtime 如何缩小打包体积

🤖 作者简介:水煮白菜王,一位前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&#…

剑指Offer(数据结构与算法面试题精讲)C++版——day7

剑指Offer(数据结构与算法面试题精讲)C版——day7 题目一:最多删除一个字符得到回文题目二:回文子字符串的个数题目三:删除倒数第k个节点 题目一:最多删除一个字符得到回文 这里我们可以在经典的字符串回文…

2025年常见渗透测试面试题(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 常见面试题 一、渗透测试经历与技术复盘 二、高频漏洞类型与攻防体系 三、渗透工具链与技术特性 四、…

大数据与人工智能之大数据架构(Hadoop、Spark、Flink)

一、核心特性与架构设计 1. Hadoop:分布式批处理的基石 核心组件: HDFS:分布式文件系统,支持大规模数据存储。MapReduce:基于“分而治之”的批处理模型,适合离线分析。 架构特点: 批处理主导&…

从IoT到AIoT:智能边界的拓展与AI未来趋势预测

文章目录 引言:从连接万物到感知万物1. AIoT的本质:将智能嵌入万物2. AIoT的推动力量与挑战2.1 推动力量2.2 关键挑战 3. 五大AIoT未来趋势预测趋势一:边缘智能将成为主流架构趋势二:AI模型将向自适应与多任务演进趋势三&#xff…

从本地新建文件夹到拉取远程仓库 dev 分支的完整步骤

《从本地新建文件夹到拉取远程仓库 dev 分支的完整步骤》 下面为你详细介绍从本地新建文件夹开始,将远程仓库的 dev 分支拉取到本地的具体步骤: 1. 创建新文件夹 在本地电脑上新建一个文件夹,作为存放项目代码的目录。你可以通过图形界面操…

python/pytorch杂聊

Dataset 是否需要自己定义:如果你使用的数据集不是 PyTorch 提供的标准数据集(如 MNIST、CIFAR-10 等),那么你需要继承 torch.utils.data.Dataset 类并实现两个方法:__len__() 和 __getitem__()。__len__() 应该返回数…

PHP 安全 E-mail

PHP 安全 E-mail 引言 随着互联网的普及和电子商务的发展,电子邮件成为了人们日常生活中不可或缺的通信工具。PHP作为一种广泛使用的服务器端脚本语言,也经常被用于发送和接收电子邮件。然而,在PHP中处理电子邮件时,安全性问题不容忽视。本文将深入探讨PHP安全发送电子邮…

【夜话系列】DelayQueue延迟队列(下):实战应用与面试精讲

🔥 本文是DelayQueue系列的下篇,聚焦实战应用场景和性能优化。通过多个真实案例,带你掌握DelayQueue在项目中的最佳实践和性能调优技巧。 📚 系列专栏推荐: JAVA集合专栏 【夜话集】JVM知识专栏数据库sql理论与实战小游戏开发文章目录 一、DelayQueue实战应用1.1 订单超…

Redis(笔记)

简介: 常用数据类型: 常用操作命令: Redis的Java客户端: 操作字符串类型的数据: 操作Hash类型的数据: 操作列表类型的数据: 操作集合类型的数据: 操作有序集合类型数据: 通用命令…

PhotoShop学习05

1.选区基础知识 选区,就是选定一些区域,我们对图片的更改只在选区内生效,这样可以精细调整图片的部分而不会影响整体。它的快捷键是M。 我们用点击鼠标后滑动就会出现虚线框,虚线框内的就是我们选定的区域。这时我们再滑动就会创…

使用Redission实现分布式锁

分布式锁在分布式系统中非常重要,主要用于解决多个进程/服务并发访问共享资源时的数据一致性问题。在日常开发中常用于: 1. 防止重复操作(幂等性控制) 场景:用户重复提交订单、重复支付、重复点击等。 示例&#xff1…

VScode 画时序图(FPGA)

1、先安装插件: 2、然后就可以编写一个.js文件,如下: {signal: [{name: clk, wave: p.......|..},{name: rstn, wave: 01......|..},{name: din_vld, wave: 0.1.0...|..},{name: din, wave: "x.x...|..", data: ["D0", …