事务及事务的隔离级别—详细

事务

事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换为另一种状态。

事务的特性

ACID原则:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)

  • 原子性

即不可分割,事务要么全部被执行,要么全部不执行。

  • 一致性

事务的执行使得数据库从一种正确状态转换成另外一种正确状态。

  • 隔离性

在事务正确提交之前,不允许把事务对该数据的改变提供给任何其他事务。

  • 持久性

事务正确提交之后,其结果将永远保存在数据库之中,即使在事务提交之后有了其他故障,事务的处理结果也会得到保存。

事务的并发问题

  • 脏读

事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。

  • 不可重复读

事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。侧重于修改,解决其需要锁住满足条件的行。

  • 幻读

系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。侧重于新增或删除记录,解决其需要锁表。

事务的隔离级别

image.png

事务的作用

保证用户的每一次操作都是可靠的,即便出现了异常的访问情况,事务必须使其操作不生效,因此不至于破坏后台数据的完整性。

索引

概念

关系数据库中,索引是一种单独的、物理的数对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

原理

索引一般以文件形式存在磁盘中(也可以存于内存中),存储的索引的原理大致概括为以空间换时间,数据库在未添加索引的时候进行查询默认的是进行全量搜索,也就是进行全局扫描,有多少条数据就要进行多少次查询,然后找到相匹配的数据就把他放到结果集中,直到全表扫描完。而建立索引之后,会将建立索引的KEY值放在一个n叉树上(BTree)。因为B树的特点就是适合在磁盘等直接存储设备上组织动态查找表,每次以索引进行条件查询时,会去树上根据key值直接进行搜索。

面试题

建立索引需要注意什么?

Mysql在建立索引优化时需要注意的问题

索引建立过多,对于写/读有什么影响?

  • 建立索引的字段越多,那数据量大的时候,文件就会越大,查找数据就会变慢.这是最显著的问题。
  • 一个索引会在 update 或 insert 时增加一次 I/O,对于操作系统底层来说是非常损耗性能的。