一、关系型数据库与非关系型数据库(Nosql)
关系型数据库有Oracle、mysql、SQLite等;非关系型数据库有MongoDb、redis、HBase等
区别:
- 关系型数据库,是指采用了关系模型来组织数据的数据库,关系模型指的就是二维表格模型,最大特点就是事务的一致性。非关系型数据库使用键值对存储数据,一般不支持ACID特性
- 关系型数据库支持SQL。非关系型数据库不提供sql支持
- 关系型数据库为了维护一致性,导致其读写性能比较差,不适合处理海量数据。
- 非关系型数据库基于键值对,数据没有耦合性,容易扩展
- 关系型数据库则只支持基础类型。非关系型数据库的存储格式是键值对形式、文档形式、图片形式等等
二、事务四大特性
- 原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态
- 一致性(Correspondence):在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
- 隔离性(Isolation):隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。
- 持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
三、数据库隔离级别
- Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
- Repeatable read (可重复读):默认级别。可避免脏读、不可重复读的发生。
- Read committed (读已提交):可避免脏读的发生。
- Read uncommitted (读未提交):最低级别,任何情况都无法保证。
1)在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。
2)以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低。
1、mysql 查询事务的隔离级别 select @@tx_isolation;
2、在MySQL数据库中设置事务的隔离 级别:
set [glogal | session] transaction isolation level 隔离级别名称;
set tx_isolation=’隔离级别名称;’
- 脏读:指在一个事务处理过程里读取了另一个未提交的事务中的数据,造成两个事务得到的数据不一致。
-
不可重复读:读取了前一事务提交的数据
-
幻读:读取了另一条已经提交的事务。所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如将一个表的某个数据项全设置为1,这时另一个事务添加了一条等于2的数据,造成幻觉)
四、Mysql的存储引擎
1) MySql主要有两种存储引擎:InnoDB和MyISAM。其它还有Memory、Archive
2)InnoDB和MyISAM区别:
- InnoDB支持事物,而MyISAM不支持事物
- InnoDB支持行级锁,而MyISAM支持表级锁
- InnoDB支持MVCC, 而MyISAM不支持
- InnoDB支持外键,而MyISAM不支持
- InnoDB不支持全文索引,而MyISAM支持。
3) 应用场景:
- MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
- InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。
4) MVCC机制:一种多版本并发控制机制。MVCC是通过保存数据在某个时间点的快照来实现的,不同存储引擎的MVCC不同,典型的有乐观并发控制和悲观并发控制。它是为了解决代替锁机制控制并发操作带来系统开销较大,能降低其系统开销
五、索引
5.1 索引分类:
- 普通索引:仅加速查询
- 唯一索引:加速查询 + 列值唯一(可以有null)
- 主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
- 组合索引:多列值组成一个索引,专门用于