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

张开发
2026/4/10 4:31:13 15 分钟阅读

分享文章

主键、外键和约束:让数据库“有规矩”才能不出错!|转行学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环境下验证。约束能帮你少踩很多坑建议从今天起建表都加上主键。

更多文章