当前位置: 首页 > news >正文

数据库中的主键和外键分别是什么意思?

让我们来聊聊数据库设计中非常重要的两个概念——主键(Primary Key)和外键(Foreign Key)。这两个概念对于保证数据的一致性和完整性至关重要。

主键(Primary Key)

主键是一个表中的一个或一组字段,它的值是唯一的,并且不允许为NULL。主键用来唯一标识表中的每一行记录。一个表只能有一个主键,但是这个主键可以由多个字段组成,这样的主键称为复合主键。

示例代码:

CREATE TABLE Users (id INT AUTO_INCREMENT,username VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,PRIMARY KEY (id)
);

在这个例子中,id 是主键,用于唯一标识每个用户。虽然 email 字段也设为了唯一,但它不是主键,而只是一个约束以确保没有重复的电子邮件地址。

外键(Foreign Key)

外键是一个表中的一个或一组字段,它引用了另一个表的主键。外键的作用是将两张或多张表关联起来,确保了数据之间的一致性。

示例代码:

CREATE TABLE Orders (order_id INT AUTO_INCREMENT,user_id INT NOT NULL,order_date DATE,PRIMARY KEY (order_id),FOREIGN KEY (user_id) REFERENCES Users(id)
);

这里 Orders 表中的 user_id 是一个外键,它引用了 Users 表中的 id 字段。这确保了每一个订单都关联到了一个真实存在的用户上。

日常开发使用建议

  1. 选择合适的主键:

    • 在设计数据库时,应该选择一个能够长期保持唯一的字段作为主键。通常情况下,使用自动增长的整数类型(如MySQL中的INT AUTO_INCREMENT)是一个不错的选择。
    • 避免使用可能会变化的字段作为主键,例如用户的电子邮件地址。
  2. 合理使用外键:

    • 使用外键可以强制实施引用完整性,防止出现“孤儿”记录(即指向不存在记录的外键)。
    • 当删除一个主表中的记录时,需要考虑级联删除或者设置为null等操作。例如,ON DELETE CASCADE会自动删除所有相关联的外键记录。
  3. 性能与索引:

    • 在高并发读取的场景下,过多的外键可能会影响查询性能,因为它们会增加额外的约束检查。
    • 考虑到性能问题,适当的时候可以考虑使用索引而不是外键来优化查询速度。
  4. 注意数据一致性:

    • 在进行大批量数据操作时,比如批量插入、更新或删除,要特别小心,避免破坏外键关系导致数据不一致。
  5. 备份与恢复:

    • 在进行数据库结构变更前,特别是涉及到删除或修改外键约束时,一定要先备份数据。
    • 恢复数据时,先恢复主表的数据,再恢复依赖于这些主表的其他表的数据,以维持数据一致性。

以上就是在实际开发过程中关于主键和外键的一些基本知识和注意事项。希望对你有所帮助!

相关文章:

数据库中的主键和外键分别是什么意思?

让我们来聊聊数据库设计中非常重要的两个概念——主键(Primary Key)和外键(Foreign Key)。这两个概念对于保证数据的一致性和完整性至关重要。 主键(Primary Key) 主键是一个表中的一个或一组字段&#x…...

HTML5中`<ul>`标签深入全面解析

在HTML5的广阔天地里&#xff0c;<ul>标签作为无序列表的代言人&#xff0c;扮演着举足轻重的角色。它不仅能够整洁地罗列信息&#xff0c;还通过丰富的属性和样式选项&#xff0c;为网页设计师提供了无限的创意空间。本文将深入剖析<ul>标签的内核&#xff0c;详细…...

MongoDB日志级别

日志 查看当前的日志级别 根据你提供的 MongoDB 命令结果&#xff0c;命令 db.adminCommand({ getParameter: "logComponentVerbosity" }) 返回了 "ok" : 0&#xff0c;这意味着命令执行失败&#xff0c;没有成功获取到日志级别的配置信息。错误信息 &quo…...

Softmax回归--分类--有监督

输出和类别的维度一样。 一、当我们想将先线性层的输出直接视为概率&#xff0c;存在一些问题&#xff1a; 1.不能限制输出数字总和为1。 2.不能保证都是正数。 所以会使用softmax进行归一化。 二、交叉熵损失 交叉熵是一个衡量两个概率分布之间差异的很好的度量&#xff0…...

Jenkins生成html报告

下载插件 1.需要下载插件 html Publisher plugins 2.下载Groovy(设置css样式&#xff09;&#xff0c;默认没有css样式 在Job配置页面&#xff0c;增加构建步骤Execute system Groovy script&#xff0c;在Groovy Command中输入上面命令&#xff0c;即可&#xff1a; System.…...

牛客——查找字符串

B-你好&#xff0c;这里是牛客竞赛_牛客周赛 Round 59 (nowcoder.com) 返回值是子串或字符在 string 对象字符串中的位置 #include <bits/stdc.h> using namespace std; int T; string s; int main() { cin >> T; while(T --) { cin >>…...

感恩 各位老师们!和滋养你的人在一起,确实很重要——早读(逆天打工人爬取热门微信文章解读)

感恩 各位老师们 引言Python 代码第一篇 洞见 和滋养你的人在一起&#xff0c;确实很重要第二篇 一天 风云突变结尾 &#xff08;不是 现在网上在呢么各种图都有 哈哈哈&#xff09; 引言 今天是什么特殊的日子吗&#xff1f; 没错 教师节 说起这个教师节 我觉得大家更要记住…...

StorageSync数据缓存API

uni.setStorageSyncs参数:将 data 存储在本地缓存中指定的 key 中&#xff0c;会覆盖掉原来该 key 对应的内容&#xff0c;这是一个同步接口。 uni.setStorageSync函数里面写两个参数,分别是key和值,两个参数名称可以随便取,如果有同名的key,那么后面key的值会覆盖掉前面key的值…...

Guitar Pro 8.2.1 Build 32 永久中文破解解锁版

嗨&#xff0c;亲爱的吉他英雄们和音乐爱好者们&#xff01; 今天&#xff0c;我要向你们安利一个让无数音乐人疯狂打Call的神奇软件——Guitar Pro 8.2&#xff01;它不仅仅是个普通的乐谱编辑器&#xff0c;更是你音乐创作路上的超级助手。 软件介绍 Guitar Pro 8永久解锁版…...

视频编辑SDK解决方案,助力企业快速部署上线

美摄科技&#xff0c;作为移动视频编辑技术的领航者&#xff0c;凭借其强大的移动端视频编辑SDK解决方案&#xff0c;正以前所未有的姿态&#xff0c;重新定义视频创作的边界&#xff0c;赋能万千用户与企业&#xff0c;共创视觉盛宴。 打破平台壁垒&#xff0c;实现无缝衔接 …...

想要从OPPO手机恢复数据?免费OPPO照片视频恢复软件

此实用程序可帮助那些寻找以下内容的用户&#xff1a; 在OPPO手机中格式化存储卡后可以恢复图片吗&#xff1f;我删除了 OPPO上的视频和图片&#xff0c;我感觉很糟糕&#xff0c;因为里面有我在拉斯维加斯拍摄的视频和照片 免费OPPO照片视频恢复软件 您能恢复OPPO上已删除的…...

Linux 自主 shell 编写(C 语言实现)

Linux 自主 shell 编写&#xff08;C 语言实现&#xff09; 效果主要步骤打印命令行提示符获取用户命令字符串切割用户命令字符串执行命令循环 至此源码&#xff08;简易半成品&#xff09;细节内建命令问题cd 退出码问题echo 查看退出码 完整源码makefilemyshell.c 效果 效果…...

pointpillar部署-TensorRT实现(一)

1. 主干部分 核心部分分为:PreProcessCuda前处理; TRT(ppOnnxPath, stream_)模型推理; PostProcessCuda(stream_)后处理 内存管理部分: cudaMallocManaged 统一内存管理,无须进行cpu内存申请,gpu内存申请,cpu到gpu的数据拷贝过程。cudaMallocManaged 即可完成同一个变量…...

ubuntu使用命令行查看硬件信息

ubuntu使用命令行查看硬件信息 CPU cat /proc/cpuinfo其中&#xff0c;model name就显示了cpu的型号&#xff0c;cpu cores显示cpu的所有物理核心数量。 内存 cat /proc/meminfo其中&#xff0c;MemTotal就显示总内存大小&#xff0c;这里为32GB内存&#xff0c;SwapTotal显…...

vue国际化vue-i18n搭配i18n-ally实现多语言国际化

i18n-ally 是一款 VS Code 插件&#xff0c;为开发者提供了一套强大而简便的工具&#xff0c;以轻松实现国际化&#xff08;i18n&#xff09;。本文将介绍如何使用 i18n-ally 插件&#xff0c;实现应用程序的多语言支持。 一:安装vscode插件。 首先&#xff0c;在 Visual Stu…...

Linux(1)--Linux简介

文章目录 1. 基本概念2. 版本2.1 RedHat红帽2.2 CentOS2.3 Ubuntu2.4 Debian2.5 Kali Linux 3. Linux应用场景 1. 基本概念 Linux&#xff0c;全称GNU/LInux&#xff0c;本质上是一个类UNIX系统。 普通用户使用Linux的比较少&#xff0c;大家普遍比较熟悉微软公司的Windows和…...

Python——破解rar压缩包密码

破解RAR压缩包密码一般是通过穷举法来实现的&#xff0c;即尝试所有可能的密码组合&#xff0c;直到找到正确的密码为止。 以下是使用Python编写的一个简单的RAR密码破解程序&#xff1a; import itertools import rarfiledef crack_rar_password(rar_file, password_length)…...

取指操作流程

取指操作&#xff0c;即指令获取&#xff08;Instruction Fetch&#xff09;&#xff0c;是计算机执行程序时的一个基本且至关重要的步骤。这一过程虽然是自动进行的&#xff0c;但控制器的参与是不可或缺的&#xff0c;尽管它不需要针对每次取指操作接收一个明确的“取指”指令…...

Git:远程项目代码上传管理

本地代码上传至远端仓库&#xff0c;需要下载git&#xff0c;访问官网下载https://git-scm.com/downloads 一、初始化本地仓库 首先要在项目本地&#xff0c;打开Git Bash&#xff0c;输入以下代码&#xff01; git init 然后进行全局设置用户名和邮箱&#xff0c;使用以下代码…...

MySQL数据库的介绍

目录 1.什么是MySQL数据库 2.MySQL数据库的设计 MySQL的进一步认识 MySQL的客户端 —— mysql MySQL的服务端 —— mysqld 3.MySQL数据库的架构 MySQL架构图 连接层 服务层 存储引擎层 文件系统层 4.MySQL的存储引擎 认识存储引擎 MySQL中的存储引擎 存储引擎之…...

all-MiniLM-L6-v2入门必读:轻量级Embedding模型选型、部署与评估全流程

all-MiniLM-L6-v2入门必读&#xff1a;轻量级Embedding模型选型、部署与评估全流程 想找一个又快又小的文本嵌入模型&#xff0c;但又担心效果不好&#xff1f;很多开发者在做语义搜索、文本分类或者智能问答时&#xff0c;都会遇到这个难题。大模型效果好但太慢&#xff0c;小…...

SillyTavern角色卡片系统全解析:从技术原理到实战应用

SillyTavern角色卡片系统全解析&#xff1a;从技术原理到实战应用 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 技术原理&#xff1a;PNG元数据驱动的角色存储机制 SillyTavern角色卡片…...

避开这些坑!用MATLAB做QPSK调制解调仿真时,你的成形滤波和匹配滤波设置对了吗?

QPSK仿真中的成形滤波与匹配滤波陷阱&#xff1a;MATLAB实战避坑指南 在数字通信系统的设计与验证过程中&#xff0c;MATLAB仿真扮演着至关重要的角色。许多工程师和研究人员在QPSK调制解调仿真中&#xff0c;常常遇到性能不达预期或结果与理论不符的情况。本文将深入剖析成形滤…...

无GPU方案:星图平台OpenClaw镜像+百川2-13B-4bits的云端沙盒体验

无GPU方案&#xff1a;星图平台OpenClaw镜像百川2-13B-4bits的云端沙盒体验 1. 为什么选择云端沙盒方案 作为一个长期折腾本地AI部署的技术爱好者&#xff0c;我最近遇到了一个典型困境&#xff1a;想体验最新的OpenClaw智能体框架&#xff0c;但手头的MacBook Pro只有集成显…...

MogFace人脸检测模型Java后端服务实战:SpringBoot集成与高并发优化

MogFace人脸检测模型Java后端服务实战&#xff1a;SpringBoot集成与高并发优化 最近在做一个智能门禁系统的项目&#xff0c;需要用到人脸检测功能。选型的时候&#xff0c;MogFace模型以其高精度和不错的速度进入了我们的视线。但问题来了&#xff0c;怎么把这个用Python写的…...

告别境外断网:Nrfr让全球网络无缝连接——免Root跨国通信解决方案

告别境外断网&#xff1a;Nrfr让全球网络无缝连接——免Root跨国通信解决方案 【免费下载链接】Nrfr &#x1f30d; 免 Root 的 SIM 卡国家码修改工具 | 解决国际漫游时的兼容性问题&#xff0c;帮助使用海外 SIM 卡获得更好的本地化体验&#xff0c;解锁运营商限制&#xff0c…...

构建向量搜索医疗诊断系统:患者数据的相似性匹配终极指南

构建向量搜索医疗诊断系统&#xff1a;患者数据的相似性匹配终极指南 【免费下载链接】usearch Fastest Open-Source Search & Clustering engine for Vectors & &#x1f51c; Strings in C, C, Python, JavaScript, Rust, Java, Objective-C, Swift, C#, GoLang, a…...

3步搞定浏览器功能扩展:Greasy Fork开源脚本管理平台完全指南

3步搞定浏览器功能扩展&#xff1a;Greasy Fork开源脚本管理平台完全指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork Greasy Fork作为开源的用户脚本管理平台&#xff0c;为技术爱好者…...

3大突破!LxgwWenKai字体效率革命:从代码阅读到多场景适配全指南

3大突破&#xff01;LxgwWenKai字体效率革命&#xff1a;从代码阅读到多场景适配全指南 【免费下载链接】LxgwWenKai LxgwWenKai: 这是一个开源的中文字体项目&#xff0c;提供了多种版本的字体文件&#xff0c;适用于不同的使用场景&#xff0c;包括屏幕阅读、轻便版、GB规范字…...

深度解析ShardingCore:EF Core分库分表架构实战与性能优化指南

深度解析ShardingCore&#xff1a;EF Core分库分表架构实战与性能优化指南 【免费下载链接】sharding-core high performance lightweight solution for efcore sharding table and sharding database support read-write-separation .一款ef-core下高性能、轻量级针对分表分库…...