数据库相关知识学习(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/adzn1/article/details/86510189

学习内容:

1、数据库4个隔离级别
2、数据库事务4个特性:ACID
3、nnodb、myisam区别
4、聚集索引、非聚集索引
5、B树(B-Tree)、B+树(B+Tree)
6、基本的数据库性能分析方式:explain、慢查询日志
7、掌握基本的sql语法

一、数据库4个隔离级别(Read Committed)
1. 关于脏读、不可重复读、幻读的理解:

`**脏读**:所谓的脏读,其实就是读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。脏读:所谓的脏读,其实就是读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。`

理解:当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据。

 **不可重复读**:事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。

理解:当前事务先进行了一次数据读取,然后再次读取到的数据是别的事务修改成功的数据,导致两次读取到的数据不匹配,也就照应了不可重复读的语义。

**幻读**:事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。

理解:当前事务读第一次取到的数据比后来读取到数据条目少。

2、数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。
在这里插入图片描述
Read uncommitted :读未提交

使用READ UNCOMMITTED级别执行的事务,可以读取尚未由其他事务提交的修改后的数据值,这些行为称为“脏”读。这是因为在Read Uncommitted级别下,读取数据不需要加S锁,这样就不会跟被修改的数据上的X锁冲突。比如,事务1修改一行,事务2在事务1提交之前读取了这一行。如果事务1回滚,事务2就读取了一行没有提交的数据,这样的数据我们认为是不存在的。

Read committed :读提交

Sql Server , Oracle默认设置。
当隔离级别设置为Read committed时,避免了脏读,但是可能会造成不可重复读。
该级别通过指定语句不能读取其他事务已修改但是尚未提交的数据值,禁止执行脏读。在当前事务中的各个语句执行之间,其他事务仍可以修改、插入或删除数据,从而产生无法重复的读操作,或“影子”数据。比如,事务1读取了一行,事务2修改或者删除这一行并且提交。如果事务1想再一次读取这一行,它将获得修改后的数据或者发现这一样已经被删除,因此事务的第二次读取结果与第一次读取结果不同,因此也叫不可重复读。

Repeatable read :重复读

 MySQL的默认隔离级别就是Repeatable read。
 Repeatable read避免了不可重复读,但还有可能出现幻读。
 该级别包括READ COMMITTED,并且另外指定了在当前事务提交之前,其他任何事务均不可以修改或删除当前事务已读取的数据。并发性低于 READ COMMITTED,因为已读数据的共享锁在整个事务期间持有,而不是在每个语句结束时释放。比如,事务1读取了一行,事务2想修改或者删除这一行并且提交,但是因为事务1尚未提交,数据行中有事务1的锁,事务2无法进行更新操作,因此事务2阻塞。如果这时候事务1想再一次读取这一行,它读取结果与第一次读取结果相同,因此叫可重复读。

Serializable :序列化

Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。

3、隔离级别与锁的关系

在Read Uncommitted级别下,读操作不加S锁;
在Read Committed级别下,读操作需要加S锁,但是在语句执行完以后释放S锁,
在Repeatable Read级别下,读操作需要加S锁,但是在事务提交之前并不释放S锁,也就是必须等待事务执行完毕以后才释放S锁。
在Serialize级别下,会在Repeatable Read级别的基础上,添加一个范围锁。保证一个事务内的两次查询结果完全一样,而不会出现第一次查询结果是第二次查询结果的子集。

猜你喜欢

转载自blog.csdn.net/adzn1/article/details/86510189
今日推荐