数据库约束&表设计

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

约束一般是指定在列上。

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的基础上,不存在非关键字段对任一候选键的函数依赖

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

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

相关推荐
8Qi88 分钟前
Redis哨兵模式(Sentinel)深度解析
java·数据库·redis·分布式·缓存·sentinel
数据库小组12 分钟前
从业务库到实时分析库,NineData 构建 MySQL 到 SelectDB 同步链路
数据库·mysql·数据库管理工具·数据同步·ninedata·数据库迁移·selectdb
CDN36018 分钟前
CDN HTTPS 证书配置失败?SSL 部署与域名绑定常见问题
数据库·https·ssl
Chengbei1124 分钟前
一次比较简单的360加固APP脱壳渗透
网络·数据库·web安全·网络安全·系统安全·网络攻击模型·安全架构
寒秋花开曾相惜25 分钟前
(学习笔记)3.9 异质的数据结构(3.9.1 结构)
c语言·网络·数据结构·数据库·笔记·学习
mcooiedo36 分钟前
mybatisPlus打印sql配置
数据库·sql
wudl556641 分钟前
MySQL 8.0.42 Docker 开发部署手册
数据库·mysql·docker
xhuiting1 小时前
MySQL专题总结(四)—— 高可用
java·数据库·mysql
kjmkq1 小时前
目工业级宽温SSD哪个品牌不掉盘最稳定?宽温环境下的稳定性性技术解析
数据库·存储
Predestination王瀞潞1 小时前
Java EE3-我独自整合(第二章:Spring IoC 入门案例)
数据库·spring·java-ee