数据库约束&表设计

前言:数据库约束是关系型数据库的一个重要功能,主要作用就是保证数据库数据的完整性,也可以理解为数据的正确性(数据本身是否正确,关联关系是否正确)

约束一般是指定在列上。

1.约束类型

1.1 NOT NULL ----指某一个列不能存储NULL值

定义id规定不能为空,所以查看表结构时NULL为NO

插入NULL数据则报错!

1.2 UNIQUE ----保证某列的每行必须有唯一的值

1.3 DEFAULT ----规定没有给列赋值时的默认值

注意:①当某列设置值了默认的约束的时候,如果不给这个列指定值才会用默认值!

②用户指定的优先级高于默认值约束!

1.4 PRIMARY KEY (主键)----not null和unique的结合(非空且唯一),确保列有唯一表示,有助于更容易快速地找到表中的一个特定的值

由此可见not null和unique结合就是primary key,可以直接定义为primary key

一般与主键搭配使用还有自增(auto increment)

注意:主键约束帮我们校验了非空且唯一,这两个校验在写入数据时对效率有一点影响,强烈建议每一张表都定义一个主键!

自增:让数据库帮我们去维护主键的增长,不用我们去借宿那,在插入时会先找到最大值,在最大值上+1,要是期间写了一条错误语句,这时候主键已经自增,不会退回,可能会出现不连续主键,但不影响!自增情况下,写入null值,数据库会自动处理null(自增成有效数据!)

注意:一个表中不允许有两个主键,但是一个主键可以有两个列(复合主键!)

在唯一校验时,只有复合主键中所有的列的值都相同,才会判定为相同数据!

1.5 FOREIGN KEY(外键) ----保证一个表中的数据匹配另一个表中的值的参照完整性

语法:foreign key (列名) references 主表(列);

表中某一列的值,必须是另外一张表中的主键列,也就是这个值必须在另外一张表存在,且满足主键或唯一约束!

示例:创捷学生表和班级表

写入正确数据是可以成功插入的,要是插入一个不存在的班级的学生会报错!

删除主表中的数据时,子表中不能有对该条记录的依赖,就意味着先要删除自己表中的记录,才可以删除主表的记录!

1.6 CHECK ----保证列中的值符合指定条件

MYSQL8.0 是有效的,MYSQL5.7 无效,所以这个语句不经常使用!

2.表的设计

从需求中获得类,类对应到数据库中的实体,实体在数据库中就表现为一张一张的表,类中的属性就是对应表中的列(字段),要确定类与类之间的关系,使用SQL去创建具体的表!

设计表会遵循三大范式!(了解概念)

2.1第一范式 (1NF)

关系型数据库的一个最基本的要求,表里的字段不可在拆分!

2.2第二范式 (2NF)

满足1NF的基础上,不存在非关键字段(非主键字段)对任意候选键(主键,外键,没有主键的唯一键)的不分函数依赖(存在于符合主键的情况下)

2.3第三范式 (3NF)

满足2NF的基础上,不存在非关键字段对任一候选键的函数依赖

第三范式可以解决数据冗余,更新异常,插入异常,删除异常的问题!!!

数据库知识不定期更新,谢谢大家的关注与点赞!

相关推荐
Warren9812 小时前
MySQL 8 中的保留关键字陷阱:当表名“lead”引发 SQL 语法错误
linux·数据库·python·sql·mysql·django·virtualenv
thekenofdis13 小时前
MongoDB 自动删除集合中过期的数据
数据库·mongodb
老邓计算机毕设13 小时前
SSM校园扶助综合服务平台的设计与实现r941j(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·校园信息化·ssm 校园扶助平台
好记忆不如烂笔头abc13 小时前
ubuntu20.04桌面允许root用户登录
服务器·数据库·postgresql
————A13 小时前
从 RAG 走不通开始:设备运维场景下的一次诊断系统重构思考
大数据·数据库·人工智能
Elastic 中国社区官方博客13 小时前
Elasticsearch:2025年的企业搜索 - 是否需要进行抓取?
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
云老大TG:@yunlaoda36013 小时前
华为云国际站代理商GSL的跨境区域政策适配有哪些具体措施?
数据库·人工智能·华为云
福尔摩斯张13 小时前
嵌入式硬件篇:常见单片机型号深度解析与技术选型指南
网络·数据库·stm32·单片机·网络协议·tcp/ip·mongodb
NineData13 小时前
如何通过 NineData 将 Oracle 不停机迁移到 GaussDB
数据库·oracle·gaussdb·数据库管理工具·ninedata·数据库迁移·迁移工具
h79971013 小时前
mysql 查询语句解析笔记(按执行顺序理解)
数据库·笔记·mysql