数据库事物四大特性
- 原子性
- 一致性
- 隔离性
- 持久性
事物四大隔离级别
- read uncommited (读未提交)
- read commited (读已提交)
- repeatable read(重复读) (mysql innodb 默认)
- serializable (串行化)
不同的隔离级别产生的问题
- 脏读
当默认级别为读未提交的时候会产生脏读,主要场景是这样的,用户A向用户B转账100元,A的事物尚未提交,B如果读到了A,就以为100已经给他了,但是如果A在这个时候提交事物失败,事物回滚了,就会造成脏读。 - 不可重复度
当默认级别是读已提交的时候会产生不可重复度,主要场景是这样的,假设A第一次查B的账户为100元,然后A想上个厕所之后,再把B的100转过了,就在这个时候B在外面做了一个大保健把钱已经付了,当A上厕所回来的时候再次查询的时候发现B的账户为0,这就是不可重复度。 - 幻读
当默认级别是重复读的时候会产生幻读,主要场景是这样的,假设班长第一次清点班里的人数为50个,有5个迟到的偷偷从后门溜进去,班主任要求班长再次清点的时候发现有55个,这个时候班长以为自己出现了幻觉,这就是幻读。
undo log & redolog & binlog
- binlog
主要是二进制的文件,主要用于主从同步。 - redolog
事物在进行的过程中会产生很多redolog,当事物提交的时候会把redolog一次性的写入磁盘 - undolog
当在数据修改的时候不仅会产生redolog,而且还会产生undolog,undolog的作用主要是用于撤回操作,它记录的是操作的反方向,比如新的它记得就是删除,修改它记得就是修改前的数据。
聚簇索引&非聚簇索引
- 聚簇索引
在每一张表里面都有唯一的主键索引,这个主键索引就是聚簇索引,一张表只有一个主键也就只有一个聚簇索引。聚簇索引的特点是:b+树的叶子节点保存的就是当前数据。 - 非聚簇索引
任何非主键索引都可以称为非聚簇索引,他的特点是:b+树的叶子节点保存的不是当前数据而是对应的聚簇索引节点的位置。