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

主键、外键和约束:让数据库“有规矩”才能不出错!|转行学DB第5天

为什么你的表里会混进“奇怪的数据”三分钟搞懂数据库的“家规”大家好呀我是数据库小学妹一个正在从设计转行学数据库的萌新。前几篇我们学会了建表、插数据、查数据。但有个问题一直让我头疼我怎么保证同一张表里不会出现两条一模一样的学生记录怎么保证订单表里的用户ID在用户表里一定存在怎么防止有人把年龄填成负数这些问题靠“自觉”是不行的。数据库给了我们一套“家规”——也就是约束专门用来管数据的“规矩”保证数据的​准确性、一致性和完整性​今天我就把自己学到的主键、外键、各种约束整理出来保证你看完就能用上。一、为什么数据库需要“规矩”没有红绿灯和斑马线马路上会乱成什么样数据也一样。约束就是数据库给表里的数据定下的规则违反规则的操作会被直接拒绝。新手阶段主键和外键是最常用也最重要的我重点讲。二、主键每条数据的“身份证”主键就是表中每一行数据的唯一标识。就像每个人都有身份证号不会重复。建表时设置主键CREATETABLEstudents(idINTPRIMARYKEY,-- 这列就是主键nameVARCHAR(50));主键的规矩不能重复插两条id1的数据会报错不能为空不写id也会报错一张表只能有一个主键但可以由多列组成叫联合主键 小技巧很多表会用id作为主键然后设置AUTO_INCREMENT自动递增这样插入时不用自己写数字数据库自动给。CREATETABLEstudents(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(50));我踩过的坑第一次建表忘了设主键结果插入了两条一模一样的学生记录。后面想删除一条发现没法区分它们……后来才知道每张表都应该有一个主键。三、外键两张表之间的“锁链”外键是用来连接两张表的。比如学生表主表存放学生基本信息成绩表从表每个学生有多条成绩记录成绩表里需要记录“这个成绩属于哪个学生”于是存学生表的id。这个student_id就是外键——它指向学生表的主键。建表时设置外键-- 学生表主表CREATETABLEstudents(idINTPRIMARYKEY,nameVARCHAR(50));-- 成绩表从表CREATETABLEscores(idINTPRIMARYKEY,student_idINT,scoreINT,FOREIGNKEY(student_id)REFERENCESstudents(id));外键的规矩插入成绩时student_id必须在学生表里存在否则报错删除学生时如果该学生还有成绩记录默认会报错需要先删成绩或设置级联删除 外键就像“家长签字”——你得先有家长孩子才能被承认。新手要不要用外键我查了很多资料有的说“一定要用”有的说“业务层控制就行”。我的结论是学习阶段建议了解概念可以先不强制使用很多在线练习环境不支持外键实际工作中金融、电商等核心系统会用保证数据不出错四、常见约束数据库的质检员唯一约束UNIQUE字段值在表中​必须唯一​但可以为空。CREATETABLEusers(idINTPRIMARYKEY,phoneVARCHAR(20)UNIQUE-- 手机号不能重复);非空约束NOT NULL字段​必须有值​不能为空。CREATETABLEstudents(idINTPRIMARYKEY,nameVARCHAR(50)NOTNULL-- 姓名必须有);默认值DEFAULT插入数据时如果不指定值自动使用默认值。CREATETABLEstudents(idINTPRIMARYKEY,statusVARCHAR(10)DEFAULT新生-- 不填时默认“新生”);检查约束CHECK限制字段的取值范围MySQL 8.0支持。CREATETABLEstudents(idINTPRIMARYKEY,ageINTCHECK(age0ANDage150));五、新手避坑指南常见错误正确做法忘了设主键每张表都设一个id主键主键用了业务字段如手机号手机号可能会变用无意义的id做主键插入外键时父表没有对应数据先插入父表再插入子表删除父表数据时忘记子表先删子表成绩再删父表学生字符串写错导致外键匹配失败外键通常用数字id关联少用字符串六、今日学习心得今天的内容总结成三句话主键 身份证保证每一行独一无二外键 挂钩保证两张表的数据能对得上约束 规矩让数据从一开始就干净有了这些“家规”数据库就不会收留“奇怪的数据”了。虽然刚开始写建表语句时要多敲几行代码但后面查数据、做分析时会省心一万倍。 我是数据库小学妹一个每天都在和SQL语句较劲的数据库小白。我们一起把看似复杂的技术变得简单有趣本文为个人学习总结所有命令均在MySQL 8.0环境下验证。约束能帮你少踩很多坑建议从今天起建表都加上主键。

相关文章:

主键、外键和约束:让数据库“有规矩”才能不出错!|转行学DB第5天

为什么你的表里会混进“奇怪的数据”?三分钟搞懂数据库的“家规”大家好呀!我是数据库小学妹👋一个正在从设计转行学数据库的"萌新"。 前几篇我们学会了建表、插数据、查数据。但有个问题一直让我头疼:我怎么保证同一张…...

第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--多策略混合算法

前言 全球校园人工智能算法精英大赛”是江苏省人工智能学会举办的面向全球具有正式学籍的全日制高等院校及以上在校学生举办的算法竞赛。其中的算法巅峰赛属于产业命题赛道,这是第3赛季,这次优化题的主题是 “碳中和”。 回顾 第七届全球校园人工智能算…...

鸿蒙_ArkUI组件同时支持双击和单击事件

我们常用的点击事件是onClick,想要实现双击需要用TapGesture手势实现,那么如果一个组件同时需要支持单击和双击,则需要使用GestureGroup,我们新建一个页面来测试一下:Entry Component struct TestDoubleClick {State m…...

动态规划——01背包问题、完全背包(python、一维DP)

01-背包问题:从最大容量开始,从后往前遍历背包容量每种物品只能选择一次。物品种类为n,背包容量为k。从最大容量开始,从后往前遍历背包容量,小于当前物品容量的背包大小不遍历,即遍历到w[i]即可。&#xff…...

3.一文看懂反向传播:从单个神经元到 PyTorch 自动求导

反向求导,多层次对应一个神经,单个神经元场景 学习这一篇的前提是,已经学会了梯度算法和线性结构算法,不明白的可以去看我之前的文章。 前面看不懂的,直接跳转到 “ 反向传播的流程 ” 底层的数学算法 z 是中间变量 u …...

【国家卫健委《医疗卫生机构数据安全管理指南》强制落地倒计时】:PHP脱敏工具未升级?3类高危场景已触发监管预警!

第一章:国家卫健委《医疗卫生机构数据安全管理指南》强制落地背景与合规红线近年来,医疗健康数据泄露事件频发,患者隐私保护压力陡增。2023年12月,国家卫生健康委员会正式印发《医疗卫生机构数据安全管理指南》(国卫办…...

string的特性及使用

string这个词很容易让我们联想到str,也就是字符串,实际上string和字符串的关联性还是很强的。 很多字符串的题目都是string类的形式出现的,日常工作中为了方便使用都是用的string类, 标准string类 使用string类时,必须…...

(文档)第121讲:Oracle兼容工具—orafce使用技巧

目标 • orafce概述 • orafce安装 • orafce应用案例 orafce概述 orafce(Oracle Functions for PostgreSQL)是一个开源项目,旨在为 PostgreSQL 数据库提供一些 Oracle 数据库中缺失或行为不同的函数。该项目通过在 PostgreSQL 中实现这些函数,帮助…...

QGIS之四十三python处理数据

1、调出Python控制台 2、新建python脚本 右边的窗口可以拉过来 3、让AI根据你的需求写python脚本 比如要进行文本转shp,让AI写python脚本,拷贝脚本进来,保存文件 4、执行脚本...

工业以太网无线网桥 SG-WX-Bridge v2.0|免布线、一对多、即插即用,工业现场无线通信神器

工厂布线麻烦、距离远、施工成本高?设备移动频繁、有线网扯来扯去易损坏?三格电子SG-WX-Bridge v2.0 工业以太网无线网桥,专为工业现场打造,把有线网变无线,1 台 AP 最多带 8 台 STA,Profinet/EtherNet/IP/…...

机器学习经验总结整理

1.一个标准的机器学习项目流程(一定要记住顺序)很多新手觉得乱,是因为没按流程想问题。做任何项目,脑子里要有这根“流水线”:定义问题 → 是分类还是回归还是聚类?业务目标是什么?获取数据 → …...

千问3.5-27B模型微调实战:提升OpenClaw任务成功率

千问3.5-27B模型微调实战:提升OpenClaw任务成功率 1. 为什么需要微调千问3.5-27B? 当我第一次将OpenClaw接入千问3.5-27B时,发现它在简单任务上表现不错,但遇到复杂操作链时经常"卡壳"。比如让它整理一周的会议录音文…...

【国家级数字农业项目技术白皮书节选】:PHP轻量化时序数据处理框架如何扛住每秒8700+传感器上报?

第一章:农业 PHP 物联网数据可视化案例在智慧农业实践中,PHP 作为轻量级服务端语言,常被用于快速构建物联网数据聚合与可视化看板。本案例基于 ESP32 传感器节点采集土壤湿度、环境温湿度及光照强度,通过 HTTP POST 将 JSON 数据推…...

Arduino RTCtime库:标准time.h兼容的DS1307/DS3231驱动

1. 项目概述RTCtime 是一款专为 Arduino 平台设计的实时时钟(RTC)驱动库,核心目标是在硬件 RTC 模块与标准 C 运行时时间系统之间建立语义一致、类型兼容的桥梁。它并非一个独立的时间计算引擎,而是对底层硬件寄存器操作的封装层&…...

2026年全网视频去水印实测:6款消除字幕工具上手,哪款更适合你

短视频剪辑、素材二创时,画面里的顽固字幕、平台角标总是破坏整体质感,找对去字幕工具能直接拉高成品效率。这次我们亲测了市面上 6 款关注度较高的视频消除字幕工具,从便捷性、处理效果、隐私安全、批量能力、平台兼容五个维度逐一拆解&…...

加入csdn 5周年

不知不觉,已经是5年过去了,今天在b站刷了个视频大有感触,决定也用csdn记录一点东西,而不是一直把东西放在github上面或者是本地...

Idiap研究院:让语音识别AI学会聆听对话历史,压缩音频记忆

语音识别技术在我们的生活中越来越常见,从手机语音助手到客服电话,从会议记录到智能搜索。但你有没有想过,为什么这些系统有时候会犯一些很明显的错误?比如当你在和语音助手对话时,明明在前一句话中提到了"张三&q…...

方差的数学意义

方差(Variance)是统计学中一个非常基础且核心的概念。简单来说,它的数学意义就是衡量一组数据的离散程度,或者叫波动性。 如果说“平均值”(均值)告诉我们数据的中心在哪里,那么“方差”告诉我们…...

从月损耗20万到年增收300万:零售老板180天蜕变

李老板在二线城市经营着5家社区超市,年营收5000万,利润却越来越薄。一个残酷的数字让他夜不能寐:因线上线下系统割裂、手工操作繁多,每月生鲜损耗和运营错漏造成的损失超过20万元。他意识到,不变革,就是在慢…...

OpenClaw+Qwen3.5-9B组合优势:3个不可替代的使用场景

OpenClawQwen3.5-9B组合优势:3个不可替代的使用场景 1. 为什么选择OpenClawQwen3.5-9B组合 去年夏天,当我第一次尝试用Python脚本自动化处理医疗研究数据时,遇到了一个尴尬的问题:要么忍受公有云API的数据隐私风险,要…...

GLM-. 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路估

1. 流图:数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调整…...

使用Dify对接自己开发的mcp

先要有自己开发的mcp,然后部署到服务器 如何开发自己的mcp:Java使用spring Ai集成的mcp开发自己的mcp-CSDN博客 使用Dify对接mcp服务 Dify如何接入MCP工具_dify如何使用mcp工具-CSDN博客 基本上都差不多, 只说一点:如果一直报…...

eVTOL 研制必读 | 厘清研制保证与设计保证的边界

在很多航空企业里,经常会出现一种现象:项目团队在谈“研制保证体系”,管理层在谈“设计保证系统”;技术人员在强调 ARP4754A/B,组织层面却在说 DOA 合规。大家都在讲“保证”,却未必在讲同一件事。结果是什…...

无人外卖店

本项目以智能无人柜云值守模式,布局写字楼、社区等外卖密集区,24小时运营,对接美团、饿了么平台,主打预制餐饮品、零食等标准化商品。...

如何快速搭建个人数字图书馆:Talebook私有书库终极指南

如何快速搭建个人数字图书馆:Talebook私有书库终极指南 【免费下载链接】talebook 一个简单好用的个人书库 项目地址: https://gitcode.com/gh_mirrors/ta/talebook 想要拥有一个属于自己的数字图书馆吗?Talebook是一个基于Calibre的简单好用的个…...

问题解决策略基础算法实现训练1

问题 A: C 语言习题 字符串排序 [提交] [状态]题目描述 输入nnn个字符串,将它们按字母由小到大的顺序排列并输出。编写三个函数实现, 用于输出inputnnn个字符串, 用于排序sortstrnnn个字符串, 用于输出outputnnn个字符…...

当Windows 10的OneDrive无法彻底卸载时,这个批处理脚本是你的终极解决方案

当Windows 10的OneDrive无法彻底卸载时,这个批处理脚本是你的终极解决方案 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 你是否…...

OpenClaw截图分析功能:Qwen3.5-9B多模态界面理解案例

OpenClaw截图分析功能:Qwen3.5-9B多模态界面理解案例 1. 为什么需要截图分析功能 在日常工作中,我经常遇到需要分析软件界面、排查异常或生成报告的场景。传统方式要么依赖人工截图标注,要么需要开发专门的自动化脚本,效率低下且…...

Navicat找回历史执行记录突然失效怎么办_重置与缓存清理

Navicat历史记录消失是因异常退出导致history.db处于WAL日志不一致或事务未提交状态,并非数据被删;需关闭所有实例、备份并重命名history.db及相关文件后重启,新记录将重新生成。Navicat 历史执行记录消失,history.db 文件还在但不…...

自动送料机构的设计

自动送料机构是现代工业中提升效率的关键部件,其核心作用在于通过机械结构实现物料的精准、连续输送,替代人工操作带来的效率波动与误差风险。无论是金属零件、塑料制品还是粉末状原料,该机构均能根据工艺需求调整输送节奏,确保物…...