数据库-三大范式
第一大范式: 原子性,即数据库表的每一列都是不可分割的原子数据性 第二大范式: 在第一大范式基础上,非主属性必须完全依赖主键(主键可能由多个属性组成,不能职只依赖其中一个) 第三大范式: 在第二大范式基础上,任何非主属性不依赖与其他非主属性
mysql引擎
MYSQL引擎就是指表的类型。 数据库的存储引擎决定了表在计算机的存储方式。 常用引擎:MyISAM InnoDB
事务
什么是事务?
事务是一个操作序列,即一系列SQL操作,这些操作要么都执行,要么都不值执行,是并发控制的基本单位。 MyISAM不支持事务,InnoDB支持事务
事务的四大特性(ACID):
原子性(Atomicity): 事务包含的所有操作要么都做,要么都不做,保证数据库是一致的。 一致性(Consistency): 数据库中的数据在事务操作前和事务处理后都必须满足业务规则和约束。即事务必须保证数据库从一个一致性状态变换到另一个一致性状态。 隔离性(Isolation): 多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 持久性(Durability): 一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来及时数据库发生故障也不应该对其有任何影响。
事务的隔离级别
读未提交、读已提交、可重复读、串行
1 .读未提交
在一个事务中,可以读取到其他事务未提交的数据变化。会产生脏读 问题。
2.读已提交
在一个事务中,可以读取到其他事务已经提交的数据变化。可能产生不可重复读 问题。
3.可重复读
在一个事务中,直到事务结束前,都可以反复读取到事务刚开始时看到的数据,并不会一直发生变化,避免了脏读,不可重复读。 InnoDB的默认事务的隔离级别就是这个。
4.串行
在每个读的数据行上都需要加上表级共享锁,在每次写数据时都要加上表级排他锁。
数据库索引
索引是什么?
索引是一种特殊的数据结构,由数据库表中的一列或多列组成,可以用来快速查询数据库表中的某条记录。
目前大部分数据库系统及文件系统都采用B树或B+树作为索引结构。 B树:
B树也称B-树,是一颗多路平衡查找树 。
B+树:
B+树是B树的一种扩展,在B+树里面,非叶子节点不在存储数据,只存索引,具体数据只在叶子节点存储,并且最底层的数据之间从左到右是按照从小到大的顺序分布,是一个双链表的结构。
聚簇索引:将数据存储与存储放到一起,找到索引也就找到了数据。叶子节点包含数据 非聚簇索引:将数据存储与索引分开,索引结构的叶子节点指向数据对应行。叶子节点含有指向数据的引用
MyISAM索引
MyISAM引擎使用B+树作为索引结果,叶节点的data域存放的是数据记录的地址。MyISAM的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分。 在MyISAM中,主索引和辅助索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。
InnoDB索引
InnoDB表数据文件本身就是一个索引结构,树的叶节点data域保存了完整的数据记录,这种索引叫做聚集索引。 InnoDB的数据文件本身要按主键聚集,所以InnoDB必须有主键(MyISAM可以没有)。 InnoDB的所有辅助索引都引用主键作为data域。 回表: 回表就是先通过数据库索引扫描出数据所在的行,再通过行主键id取出索引中未提供的数据,即基于非主键索引的查询需要多扫描一棵索引树。 覆盖索引: 覆盖索引指的是在一次查询中,如果一个索引包含或者说覆盖所有需要查询的字段的值,我们就称之为覆盖索引,而不再需要回表查询。
|