这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记。
事务是指访问可能更新数据库中各种数据项的一个程序执行单元(unit),是由一组SQL语句组成,需要满足ACID特性。 ACID
- Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
数据库模型:
存储引擎介绍:
存储引擎实际就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
- MyISAM 这种引擎是mysql最早提供的。 使用这个存储引擎,每个MyISAM在磁盘上存储成三个文件: frm文件:存储表的定义数据 MYD文件:存放表具体记录的数据 MYI文件:存储索引 frm和MYI可以存放在不同的目录下。 MYI文件用来存储索引,但仅保存记录所在页的指针,索引的结构是B+树结构。 通过MYI的B+树结构来查找记录页,再根据记录页查找记录。 支持全文索引、B树索引和数据压缩。
- InnoDB InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。
InnoDB是默认的数据库存储引擎。 对于InnoDB来说,最大的特点在于支持事务。但是这是以损失效率来换取的。 特点: 可以通过自动增长列,方法是auto_increment。 支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。 使用的锁粒度为行级锁,可以支持更高的并发。 支持外键约束。外键约束其实降低了表的查询速度,但是增加了表之间的耦合度。 配合一些热备工具可以支持在线热备份。 在InnoDB中存在缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度。 对于InnoDB类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。数据和索引放在一块,都位于B+数的叶子节点上。 存储结构: 数据是存储在主键索引里面的,记住,每个索引就是一个B-tree。
- memory(heap) 这种类型的数据表只存在于内存中。
它默认使用hash索引,所以数据的存取速度非常快。 因为是存在于内存中,所以这种类型常应用于临时表中。 每一个表实际上和一个磁盘文件关联,文件是frm。