关于Mysql数据库,这些知识点你确定都会了吗?

说到MySQL, 大家都很熟悉 , 因为这是我们工作中不可避免会使用到的技术 , 但是你真正的掌握了它吗?还是每天在重复crud呢!那么怎么样告别crud呢!来到这里就对了 。简单概念的上的东西我就不提了 。直接上技术 。
数据库三大范式第一范式1NF:
数据表中的字段 , 必须是不可拆分的最小单元 , 也就是确保每一个字段的原子性 。例如:
 

关于Mysql数据库,这些知识点你确定都会了吗?

文章插图
 
 
那么怎么去设计才是正确的呢?其中 address 可以再分为省、市、地区、街道、名牌号 , 违反了第一范式 。
既然要满足原子性不可以分割 , 我们把这些可以拆分的数据都给拆分出来不就行了吗?以下是笔者拆分后的数据 。
 
关于Mysql数据库,这些知识点你确定都会了吗?

文章插图
 
 
第二范式2NF:使用的时候只需与此表关联即可 。
满足1NF的基础上 , 要求:表中的所以列 , 都必需依赖主键 , 而不能有任何一列与主键没有关系 。言下之意就是一个表设计只能描述一件事情 , 不能把其它
 
关于Mysql数据库,这些知识点你确定都会了吗?

文章插图
 
 
无关的也嵌入进来 。第二范式消除了表的无关数据 。
那么怎么去设计才是正确的呢?其中 address 可以再分为省、市、地区、街道、名牌号 , 违反了第一范式 。
此表中区域地址和你的用户心情毫无关系 。正确的做法就是建立另外一张描述你情绪的表 。
第三范式 3NF:
满足2NF的基础上 , 任何非主字段不依赖与其它非主字段 , 在2NF基础上消除传递依赖 , 也就是我们不允许设计的字段不能出现冗余现象 。
 
关于Mysql数据库,这些知识点你确定都会了吗?

文章插图
 
 
我们从这几张表中可以看出province , city,district,street,detailaddress,doorid都是依赖于region_id , 所以不满足第三范式 。
笔者再多分享一点给大家 , 在实际工作当中 , 我们可能会反3NF,那么什么时候去反3NF呢?举个实际工作当中的例子吧!例如我们在一个订单中可能需要关联到用户 , 我们查看订单的时候需要显示出用户名 , 用户的其它信息就不用显示出来了 , 如果不反三范式我们 查询都需要关联用户表 , 如果查询很普遍的话 , 就会影响到性能 , 所以我们干脆就可以把用户名这个字段设计到订单中 。这样就可以提高性能 。在实际工作中灵活运用 。
数据库五大约束1、主键约束(primary key)
唯一性 , 非null性
2、唯一约束 (unique)
唯一性 , 可以空 , 单只能有一个
3、检查约束 (check)
对该列数据的范围、格式的限制(如:年龄、性别等)
4、默认约束(default)
该数据的默认值
5、外键约束(foreign key)
建立两表之间的关系
数据库事务数据库事务是什么?
指的是单个逻辑工作单元执行的一系列操作 , 要么全部执行成功 , 要么完全不执行 。
事务的四大特性
原子性
原子性是指事务包含的所有一系列操作要么全部成功提交 , 要么全部失败回滚 。它是数据库事务最本质的特性 。
一致性
一致性是指在事务开始之前和结束以后 , 数据库的完整性约束没有被破坏 , 这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性、这里有个容易混淆点 , 容易和数据一致性混淆 。这里更多的强调单机下的事务一致性 , 必须是一个事务内部 。
隔离性
每个事务都有各自的资源单位 , 事务与事务之间是互相隔离的、不可见 , 而事务的结果是对其它事务是可见的 。这里可以理解为资源粒子度的划分与隔离 。
持久性
持久性确保的是一旦提交了事务 , 出现系统故障 , 该事物的更新也不会丢失 。可以理解为持久化到磁盘中 。
事务的四种隔离级别
隔离级别由低到高分别为
读未提交(READ_UNCOMMITTED)
就是一个事务A去读取一个事务B未提交的数据 。如果B事务出现回滚 , 那么事务A就会出现脏读的问题 。


推荐阅读