最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

每日看点!MYSQL数据库之事务隔离级别详解

来源:博客园

本系列为:MySQL数据库详解,为千锋资深教学老师独家创作

致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【关注】持续追更~

文末有本文重点总结,技术类问题,也欢迎大家和我们沟通交流!


(资料图片仅供参考)

前言

从今天开始本系列内容就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深,全面讲解数据库体系。非常适合零基础的小伙伴来学习。

全文大约 【1505】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考...

一.事务隔离级别

什么是事务隔离级别呢?对我们的日常操作结果又有什么影响呢?下面带各位小伙伴先来了解下事务隔离级别的概念。

1.隔离级别的概念

多个客户端操作时,各个客户端的事务之间应该是隔离的,相互独立的,不受影响的。

如果多个事务操作同一批数据时,则需要设置不同的隔离级别,否则就会产生问题。

2.四种隔离级别

我们先来了解一下四种隔离级别的名称,再来看看可能出现的问题。

1读未提交readuncommitted
2读已提交readcommitted
3可重复读repeatableread
4串行化serializable

3.可能引发的问题

下面总结了数据库中不同事务隔离级别可能引发的问题。各位小伙伴可以参照下:

问题现象
脏读是指在一个事务处理过程中读取了另一个未提交的事务中的数据,导致两次查询结果不一致。
不可重复读是指在一个事务处理过程中读取了另一个事务中修改并已提交的数据,导致两次查询结果不一致。
幻读select某记录是否存在,不存在,准备插入此记录,但执行insert时发现此记录已存在,无法插入。或不存在执行delete删除,却发现删除成功。

4.数据库隔离级别操作语法

查询数据库隔离级别:

语法:SELECT@@TX_ISOLATION;

修改数据库隔离级别:

语法:SETGLOBALTRANSACTIONISOLATIONLEVEL级别字符串;

5.事务隔离级别演示

举个例子:脏读的问题

--查询账户表select * fromaccount;--设置隔离级别为readuncommittedset global transaction isolation level read uncommitted;--开启事务start transaction;--转账updateaccountsetmoney=money- 500 whereid= 1;updateaccountsetmoney=money+ 500 whereid= 2;--窗口2查询转账结果,出现脏读(查询到其他事务未提交的数据)--窗口2查看转账结果后,执行回滚rollback;

举个栗子:解决脏读的问题和演示不可重复读的问题。

--设置隔离级别为readcommittedset global transaction isolation level read committed;--开启事务start transaction;--转账updateaccountsetmoney=money- 500 whereid= 1;updateaccountsetmoney=money+ 500 whereid= 2;--窗口2查看转账结果,并没有发生变化(脏读问题被解决了)--执行提交事务。commit;--窗口2查看转账结果,数据发生了变化(出现了不可重复读的问题,读取到其他事务已提交的数据)

举个栗子:解决不可重复读的问题。

--设置隔离级别为repeatablereadset global transaction isolation level repeatable read;--开启事务start transaction;--转账updateaccountsetmoney=money- 500 whereid= 1;updateaccountsetmoney=money+ 500 whereid= 2;--窗口2查看转账结果,并没有发生变化--执行提交事务commit;--这个时候窗口2只要还在上次事务中,看到的结果都是相同的。--只有窗口2结束事务,才能看到变化(不可重复读的问题被解决)

6.隔离级别总结

编号隔离级别名称出现脏读出现不可重复读出现幻读数据库默认隔离级别
1readuncommitted读未提交
2readcommitted读已提交Oracle/SQLServer
3repeatableread可重复读MySQL
4serializable串行化

注意:隔离级别从小到大安全性越来越高,但是效率越来越低,所以不建议使用READ UNCOMMITTED和SERIALIZABLE隔离级别。

二.结语

最后在这里对本文核心要点进行总结:

1. 理解脏读、幻读、不可重复读产生的原因和解决办法。

2. 各位小伙伴熟练记住不同隔离级别以及会导致的问题。

以上就是本文的全部内容了,更多技术类干货,可以持续关注~

关键词: