MySQL的事务隔离级别

隔离级别

1、事务的隔离级别决定了事务之间可见的级别。

2、当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:

● 脏读取(Dirty Read)

一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交,这就出现了脏读取。

● 不可重复读(Non-repeatable Read)

在同一个事务中,同一个读操作对同一个数据的前后两次读取产生了不同的结果,这就是不可重复读。

● 幻像读(Phantom Read)

幻像读是指在同一个事务中以前没有的行,由于其他事务的提交而出现的新行。

四个隔离级别

InnoDB 实现了四个隔离级别,用以控制事务所做的修改,并将修改通告至其它并发的事务:

● 读未提交(READ UMCOMMITTED)

允许一个事务可以看到其他事务未提交的修改

● 读已提交(READ COMMITTED)

允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的

● 可重复读(REPEATABLE READ)

确保如果在一个事务中执行两次相同的SELECT语句,都能得到相同的结果,不管其他事务是否提交这些修改。 (银行总账)

该隔离级别为InnoDB的缺省设置

● 串行化(SERIALIZABLE) 【序列化】

将一个事务与其他事务完全地隔离。

例如:

A可以开启事物,B也可以开启事物

A在事物中执行DML语句时,未提交

B不以执行DML,DQL语句

隔离级别与一致性问题的关系

设置服务器缺省隔离级别

1、通过修改配置文件设置

● 可以在my.ini文件中使用transaction-isolation选项来设置服务器的缺省事务隔离级别

● 该选项值可以是:

READ-UNCOMMITTED

READ-COMMITTED

REPEATABLE-READ

SERIALIZABLE

● 例如:

[mysqld]

transaction-isolation = READ-COMMITTED

2、通过命令动态设置隔离级别

● 隔离级别也可以在运行的服务器中动态设置,应使用SET TRANSACTION ISOLATION LEVEL语句

● 其语法模式为:

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL

其中的可以是:

READ UNCOMMITTED

READ COMMITTED

REPEATABLE READ

SERIALIZABLE

● 例如: SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

隔离级别的作用范围

1、事务隔离级别的作用范围分为两种:

● 全局级:对所有的会话有效

● 会话级:只对当前的会话有效

2、例如:设置会话级隔离级别为READ COMMITTED :

mysql> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

或:

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

3、设置全局级隔离级别为READ COMMITTED :

mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

查看隔离级别

1、服务器变量tx_isolation(包括会话级和全局级两个变量)中保存着当前的会话隔离级别。

2、为了查看当前隔离级别,可访问tx_isolation变量:

● 查看会话级的当前隔离级别:

mysql> SELECT @@tx_isolation;

或:

mysql> SELECT @@session.tx_isolation;

● 查看全局级的当前隔离级别:

mysql> SELECT @@global.tx_isolation;

并发事务与隔离级别示例

read uncommitted(未提交读) --脏读(Drity Read):

会话一

会话二

mysql> prompt s1>

mysql> use bjpowernode

s1>use bjpowernode

mysql> prompt s2>

s1>create table tx (

id int(11),

num int (10)

);

s1>set global transaction isolation level read uncommitted;

s1>start transaction;

s2>start transaction;

s1>insert into tx values (1,10);

s2>select * from tx;

s1>rollback;

s2>select * from tx;

read committed(已提交读)

会话一

会话二

s1> set global transaction isolation level read committed;

s1>start transaction;

s2>start transaction;

s1>insert into tx values (1,10);

s1>select * from tx;

s2>select * from tx;

s1>commit;

s2>select * from tx;

repeatable read(可重复读)

会话一

会话二

s1> set global transaction isolation level repeatable read;

s1>start transaction;

s2>start transaction;

s1>select * from tx;

s1>insert into tx values (1,10);

s2>select * from tx;

s1>commit;

s2>select * from tx;

mysql会话事务隔离_MySQL的事务隔离级别相关推荐

  1. 不属于mysql事物的特性_mysql基础---事务 事务的四大特性(ACID) 四种隔离级别

    一.事务 mysql中,事务是一个最小的不可分割单元.事务能够保证一个业务的完整性. eg:银行转账 a -> -100 update user set money=money-100; b - ...

  2. mysql 5.1支持事务吗_MySQL的事务和隔离级别 | 旺旺知识库

    一.什么是事务? 数据库的事物,是指将一系列的操作作为一个逻辑单元来执行,即加入由十条SQL语句组成的一个事物,则要么则十条都执行成功,要么都不执行!事务处理可以确保除非事务性单元内的所有操作都成功完 ...

  3. mysql有三种事务模式_MySQL之事务与三大范式

    一.MySQL事务 在MySQL中将一组有序的增删改操作看做一个独立的执行单元,当这一组所有的操作都成功,事务执行成功,如果其中有一个操作失败,事务执行回滚.MySQL 事务主要用于处理操作量大,复杂 ...

  4. mysql 长事务查询_MySQL长事务详解

    前言: 『入门MySQL』系列文章已经完结,今后我的文章还是会以MySQL为主,主要记录下近期工作及学习遇到的场景或者自己的感悟想法,可能后续的文章不是那么连贯,但还是希望大家多多支持.言归正传,本篇 ...

  5. mysql事务并发控制_MySQL之事务及并发控制

    本节索引: 一.事务Transaction 二.事务的隔离级别 三.并发控制 四.MVCC-多版本的并发控制协议 一.事务 什么是事务? 事务Transactions:一组原子性的SQL语句,或一个独 ...

  6. mysql事务 并发_Mysql关于事务并发带来的问题

    MySQL从5.5.8开始,Innodb就是默认的存储引擎,Innodb最大的特点是:支持事务.支持行级锁. 既然支持事务,那么就会有处理并发事务带来的问题:更新丢失.脏读.不可重复读.幻读:相应的为 ...

  7. mysql 幻读的隔离_MySQL的RR隔离级别与幻读问题

    最近在网上看了不少mysql锁的文章,不少文章都提到InnoDB的RR隔离级别(Repeatable Read)无法解决幻读的问题.对此问题作者亲自做了一些实验,将实验结论记录在此. 本次实验的mys ...

  8. 一条mysql语句是事务吗_mysql中事务

    事务控制语言 什么叫做"事务": 想象一个场景: 小明给小花 汇款 5000元 买IPHONE,操作界面不用管,不管什么操作界面,最终都要落实到这样两条语句的执行: update ...

  9. mysql语句中事务可靠性_MySql的事务使用与示例详解

    在MySQL中,事务就是一个逻辑工作单元的一系列步骤.事务是用来保证数据操作的安全性. 事务的特征: 1.Atomicity(原子性) 2.Consistency(稳定性,一致性) 3.Isolati ...

最新文章

  1. window.open()函数参数说明
  2. 数据库中char与varchar类型的区别
  3. pageSet还没完count就执行了
  4. 工作后和在学校最大的区别是什么?
  5. Python中的异常处理Try...except...finally的使用的简单理解
  6. android wear中国版,AndroidWear中国版App——小白上手指南
  7. centos7 服务器安装nginx,mysql,php
  8. linux系统如何切换语言环境变量,Linux系统中如何修改某用户语言环境变量
  9. AOP日志组件 多次获取post参数
  10. python sys.exc_info()详解
  11. iPhone、iPad尺寸
  12. unity 使用像素实现墙面子弹留孔效果(给已有贴图模型叠加贴图)
  13. 对话系统综述 *Advances and Challenges in Conversational Recommender Systems: A Survey*
  14. 再见python你好go语言_再见,Python。你好,Go语言。
  15. UX、UI、 IA和IxD
  16. 连接请求被计算机拒绝访问,Windows 10共享打印机解决方案被拒绝访问
  17. 虚拟机上安装eclipse教程
  18. 巴菲特08年致股东信
  19. 工业机器人上下料数控车床实训平台
  20. [转帖]贪官给儿子的一封家信

热门文章

  1. HTML打开电脑摄像头
  2. 为什么我购买了 iCloud 额外的 50g 存储空间?
  3. TPO68C3|Reschedule An Exam|托福听力精听|21:40~22:40
  4. php手绘功能,Canvas的手绘风格图形库Rough.js
  5. 在高层建筑中多少层开始使用爬架?联筑赚告诉你答案!
  6. 万科回应入股泰禾集团:仍存在不确定性,后者已是失信被执行人
  7. uniapp通话录音功能
  8. 官网下载eclipse出现mirror.kakao.com 的响应时间过长+解决方法
  9. 银行卡号合法性验证小结
  10. Python中时间 时间戳之间的转换