mysql事务、隔离级别
一、事务简介
事务是一组操作的集合,它是一一个不可分割的工作单位,事务会把所有的操作作为- -个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
二、有关事务操作
mysql中的事务是默认的自动提交的,我们可以手动的去关闭 或者开启事务
#查看事务是否自动提交
select @@autocommit; # 等于1 默认自动提交 #设置事务提交方式
set @@autocommit = 0; # 关闭自动提交事务 #也可以直接设置开启事务
start transaction ;
#或着
begin ; #提交事务 如果业务操作正常完成就提交事务
commit ; #回滚事务 如果业务操作在执行过程中出现异常 回滚事务保证事务的完整性和正确性
rollback ;
三、事务的四大特性(ACID)
原子性(Atomicity) : 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性 (Consistency) : 事务完成时,必须使所有的数据都保持一致状态。
隔离性(Isolation) : 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability) : 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
四、并发事务问题
1、脏读
一个事务读到另一个事务还没有提交的事务。
2、不可重复读
一个事务先后读取同一条记录,但两次读取的数据不同。
3、幻读
一个事务在按照条件查询数据时,没有这条数据,但是在插入数据时却又发现有这条数据已经存在,好像出现了“幻觉”。
五、事务的隔离级别
1、读未提交(Read uncommitted)
可能出现:脏读、不可重复读、幻读;隔离级别最差,性能最高。
2、读已提交(Read committed)
可能出现:不可重复读、幻读。
3、可重复读(Repeatable Read(mysql的默认隔离级别))
可能出现:幻读。
4、串行化(Serializable)
上述并发问题都可解决,隔离级别最高,但是性能最差。
#查看事务隔离级别
select @@transaction_isolation; # REPEATABLE-READ #设置事务的隔离级别
set session transaction isolation level read uncommitted ; set session transaction isolation level read committed ; set session transaction isolation level repeatable read ; set session transaction isolation level serializable ;
场景一
在idea中开启两个控制台,设置事务级别为 读未提交隔离级别 并开启事务
控制台1 第一次查询

控制台2 执行如下语句 未提交

控制台1 再次查询

可见在控制台2执行更新操作后,还没提交,控制台1再次执行查询操作时,查询到的数据已经改变了,证实了读未提交发生脏读现象。
场景二
在idea中开启两个控制台,设置事务级别为 读已提交隔离级别 并开启事务
控制台1 第一次查询

控制台2 执行如下语句 未提交

控制台1 再次查询

证实了事务的隔离级别设置为读已提交解决了脏读问题
场景三
在idea中开启两个控制台,设置事务级别为 读已提交 并开启事务
控制台2 执行如下语句 未提交

控制台1 第一次查询

控制台2 执行commit提交后 控制台1 再次查询结果不同

可见在控制台1在一次事务中,在控制台2更新前后查询到的数据不同,证实了读已提交发生了不可重复读问题
场景四
在idea中开启两个控制台,设置事务级别为 可重复读隔离级别 并开启事务
控制台2 执行如下语句 未提交

控制台1 第一次查询

控制台2 执行commit提交后 控制台1 再次查询结果相同

可见在控制台1在一次事务中,在控制台2更新前后查询到的数据不同,证实了可重复读隔离级别解决了不可重复读问题
场景五
在idea中开启两个控制台,设置事务级别为 可重复读隔离级别 并开启事务
控制台1 第一次查询 为空


控制台2 执行插入 并提交

控制台1 执行相同的插入sql 发现已经存在 于是就查询,但是又查不到数据
对于控制台1来说就像是“幻觉”一样,证实了可重复读隔离级别发生了幻读问题
场景六
在idea中开启两个控制台,设置事务级别为 串行化隔离级别 并开启事务
控制台1 执行查询 为空


控制台2 执行插入 可见操作阻塞

控制台1提交事务后,控制台1才能够完成插入操作
这种阻塞的效果有效的避免了幻读问题,证实了串行化隔离级别解决了幻读问题
总结:实际使用还得根据业务本身去设置隔离级别,隔离级别最高性能也最差,隔离级别低的性能较好。
mysql事务、隔离级别的更多相关文章
- [51CTO]新说MySQL事务隔离级别!
新说MySQL事务隔离级别! 事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!本文所讲大部分内容,皆有官网作为佐证,因此对本文内 ...
- 查询mysql事务隔离级别
查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava 1.查看当前会话隔离 ...
- MySQL事务隔离级别测试实例
https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...
- Mysql事务-隔离级别
MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...
- MySQL事务隔离级别 解决并发问题
MySQL事务隔离级别 1. 脏读: 骗钱的手段, 两个窗口或线程分别调用数据库转账表,转账后未提交,对方查看到账后,rollback,实际钱没转. 演示方法: mysql默认的事务隔离级别为repe ...
- mysql事务隔离级别、脏读、幻读
Mysql事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...
- mysql事务隔离级别与设置
mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...
- MySQL事务隔离级别(二)
搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...
- MySQL事务隔离级别(一)
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...
- 面试突击61:说一下MySQL事务隔离级别?
MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种: READ UNCOMMITTED:读未提交. READ COMMITTED:读已提交. REP ...
随机推荐
- 基于Python的某大学某学院新生高考成绩分析
# coding=gbk import pandas as pd import numpy as np import matplotlib.pyplot as plt from pylab impor ...
- 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作
一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...
- 【建议收藏】Redis超详细入门教程大杂烩
写在前边 Redis入门的整合篇.本篇也算是把2021年redis留下来的坑填上去,重新整合了一翻,点击这里,回顾我的2020与2021~一名大二后台练习生 NoSQL NoSQL(NoSQL = N ...
- .NET6: 开发基于WPF的摩登三维工业软件
MS Office和VisualStudio一直引领着桌面应用的时尚潮流,大型的工业软件一般都会紧跟潮流,搭配着Ribbon和DockPanel风格的界面.本文将介绍WPF下两个轻量级的Ribbon和 ...
- Mysql Json函数总览 (一)
JSON函数相关文章均来自官网,此处仅做记录,以便以后查询方便. https://dev.mysql.com/doc/refman/5.7/en/json-functions.html JSON函数参 ...
- HOOK API(二) —— HOOK自己程序的 MessageBox
转载来源:https://www.cnblogs.com/hookjc/ 0x00 前言 以下将给出一个简单的例子,作为HOOK API的入门.这里是HOOK 自己程序的MessageBox,即将自己 ...
- 关于 BSGS 以及 ExBSGS 算法的理解
BSGS 引入 求解关于\(X\)的方程, \[A^X\equiv B \pmod P \] 其中\(Gcd(A,P)=1\) 求解 我们令\(X=i*\sqrt{P}-j\),其中\(0<=i ...
- MySQL中 BETWEEN ... AND ...
MySQL中 BETWEEN ... AND ... 1. 准备测试数据 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...
- 神奇小证明之——世界上只有5个正多面体+构造x3=2a3
今天我彻底放飞自我了...作业还没写完...但就是要总结一些好玩的小性质...谁给我的勇气呢?
- 基于PXIe接口的CoaXpress高速相机图像采集、回放
PXIe简介 PCI eXtensions for Instrumentation or PXI is a computer-based hardware and software platform ...