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 ...
随机推荐
- 幸运转轮(Cakra)
题目描述 lxx参加了某卫视举办的一场选秀节目,凭借曼妙的舞姿和动人的歌声,他在众多idol中脱颖而出.现在在他的面前,有四个大转轮,这四个转轮将决定他能否赢得最终大奖--出道,机会只有一次! 每 ...
- python习题_读写csv格式的文件
1.读写TXT文件 # *_* coding : UTF-8 *_* # 开发人员 : zfy # 开发时间 :2019/7/7 16:26 # 文件名 : lemon_10_file.PY # 开发 ...
- elasticsearch之mappings parameters
目录 ignore_above 返回elasticsearch目录 ignore_above#top 长度超过ignore_above设置的字符串将不会被索引或存储(个人认为会存储,但不会为该字段建立 ...
- c语言字符串函数详解
转载请注明来源:https://www.cnblogs.com/hookjc/ oid *memset(void *dest, int c, size_t count); 将dest前面count个字 ...
- js正则表达式 (.+)与(.+?)
(.+)默认是贪婪匹配 (.+?)为惰性匹配 疑问号让.+的搜索模式从贪婪模式变成惰性模式. var str = 'aaa<div style="font-color:red;&quo ...
- DAG(有向无环图)技术
什么是DAG? DAG的全称为"Directed Acyclic Graph",中文意思为:有向无环图,它由有限个顶点和"有向边"组成,从任意顶点出发,经过若干 ...
- Solution -「LOCAL」Burning Flowers
灼之花好评,条条生日快乐(假装现在 8.15)! \(\mathcal{Description}\) 给定一棵以 \(1\) 为根的树,第 \(i\) 个结点有颜色 \(c_i\) 和光亮值 ...
- Linux-CPU优化之上下文切换
为什么大量进程(通常进程数大于CPU个数)的运行会导致CPU长时间处于等待时间而导致平均负债率过高呢?没有使用CPU且无不可中断的进程,这就涉及到了上下文切换. 巧妙地利用了时间片轮转的方式, CPU ...
- Spring Boot 热插拔技术应用
对Spring/Spring Boot使用频繁的开发者,应该常见在应用Application上加@EnableXXX类似的注解.其实这个@EnableXXX的注解就是热插拔技术,加了这个就可以启动对应 ...
- tip7:CentOS8虚拟机安装相关总结
使用工具:Win10家庭版.WM12Pro.CentOS8. 一.安装 之前使用虚拟机安装操作系统使用的都是OpenSuse,也有相关备份.但是在Win10家庭版上用不了,启动电脑蓝屏(可能某些硬件不 ...