事务的隔离级别,脏读,幻读,不可重复读

事务的隔离级别,脏读,幻读,不可重复读

脏读

​ 脏读就是指当一个事务正在访问数据,并对数据进行了修改,修改还未提交时,被另一个事务读取并使用了此数据,这就是脏读。

​ 举个例子,张三的工资为200,事务A把张三的工资改到300,但是事务A未提交的时候,事务B读取了张三的工资数据,然后如何事务A出现错误回滚的话,事务B取到的数据就相当于不存在的,就是一个垃圾数据。

不可重复读

​ 不可重复读,就是指 一个事务A进行了多次读取同一数据操作,但是还事务还未结束,另一个事务B也访问了这个数据,但是如果事务B对数据进行了修改,那么事务A多次读取的数据中,就会不匹配,同一个数据,值有不同的,多次读取的数据是不一样的,因此称为不可重复读

​ 举个例子,事务A,读取张三的工资为200,正打算读取第二次工资数据,事务B将工资改成了300,那么在事务A中读取的数据并不一致,造成了不可重复读。

幻读

​ 幻读,是指当事务A修改表里所有数据时,事务B正在此时向表中插入了一行新数据,然后事务A,查看表时,会发现还有一行数据未修改,好像出现幻觉一样。

​ 举个例子,工资为200的有十个人,事务A读取了总人数为10,然后事务B又插入了一个员工的信息,工资也为200,当事务A此时短时间内进行第二次读取时,就会发生两次结果不一致,不知道那次结果是对的,此时就是产生了幻读。

提醒:

​ 不可重复读的重点是修改:

​ 同样的数据,短时间内第一次和第二次读取到的值不一致;

​ 幻读的重点在于新增和删除;

如何解决此类的问题

​ 数据库开发锁机制解决并发访问时出现的这些问题,根据锁定的对象不同,锁可分为行级锁和表级锁;根据并发事务锁定的关系来看,又分为共享锁定和独占锁定,共享锁定会防止独占锁定但是允许共享,独占锁是为了防止共享锁定也防止其他的 独占锁定,为了能够安全的在并发时修改数据,数据库必须在进行更改的行上添加独占锁定,增删改查语句都会隐式采用必要的行锁定;

​ 锁机制的管理很复杂,所以基于锁机制,数据库给用户提供了不同的事务隔离级别,用户可以自定义书屋隔离级别,数据库就会按照不同的级别来进行自动选择合适的锁;

​ 事务的隔离级别和数据库并发性能是呈现反比的,隔离级别越高,并发性越低;

事务的隔离级别

​ mysql数据库默认实现的隔离级别是Repeatable(可重复读);

​ 在mysql中支持四种隔离级别,Oracle只支持Serializeble(串行化)和Read committed(读已提交)两种级别,默认为后者;

​ 事务的四大特性:原子性(执行是按照个体为单位)、一致性(要么全部成功,要么全部失败)、隔离性(事务执行,不受干扰)、持久性(事务对数据库的改变在不受其他修改影响的情况下,会一直存在);

Read uncommitted(读未提交)

​ 在一个事务对摸个数据进行写操作时,则不允许另一个事务同时对这个数据进行写操作,此时的状态是只能 读,是通过排他写锁实现的,避免数据提交不是自己修改的数据,但是修改的数据未提交也会被读到,所以在未确定 数据时,测试数据就会被读取使用,就会出现脏读;

解决了更新丢失,但是还是可能出现脏读

Read committed(读提交)

​ 这种级别是当一个事务是只读操作的话,允许其他事务读写,但是如果是写事务,就会禁止其他事务的读写, 避免了脏读,但是可能出现不可重复读,当一个操作多次读取同一个数据时,第一次读取到数据,中间插入另一个数 据对其进行写操作,事务1无法访问,当事务1第二次访问该数据时,数据已经改变,两次数据不一致,造成了不可重 复读;

​ 这种级别虽然将一个数据在事务写期间进行锁定,但是还是引发事务进行多次读取时出现不可重复读;

解决了更新丢失和脏读问题

Repeatable read(可重复读取)

​ 第三种级别,针对事务多次重复读同一数据造成不可重复读,规定了在事务多次读取期间,其他事务不能访问 该数据,读取事务禁止了写事务允许读,写事务直接禁止读写,但是可能出现幻读,此级别禁止了写操作,但是可以 对此数据进行增删操作,会造成幻读;

解决了更新丢失、脏读、不可重复读、但是还会出现幻读

Serializable(可序化)

​ 此级别要求事务序列化执行,事务只能一个接一个执行不能并发执行,通过行级锁不能实现序列化,必须通过 其他机制保证新插入的数据不会被执行查询操作的事务访问到,此级别是最高的事务隔离级别,代价就是性能很低;

解决了更新丢失、脏读、不可重复读、幻读(虚读)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DdOnsrv-1587289330743)(C:\Users\Samsung\Desktop\数据库面试题\images\2019052019551758.png)]

解决了更新丢失、脏读、不可重复读、幻读(虚读)**

在这里插入图片描述

发布了5 篇原创文章 · 获赞 4 · 访问量 17

猜你喜欢

转载自blog.csdn.net/qq_45218334/article/details/105618884
今日推荐