MySQL的事务隔离级别以及设置

隔离级别概念:

一、读未提交(READ-UNCOMMITTED)

当事务隔离级别设置为READ-UNCOMMITTED(读未提交)时,在这种状态下,一个会话更新的数据会被其他的会话马上看到,即使该更新的数据尚未被事务所提交(commit)。

结论:当一个会话的(session)事务隔离级别被设置为READ-UNCOMMITTED时,那么它将可以马上看到其他会话更新的未提交数据,也既会出现脏读。

二、读已提交(READ-COMMITTED)

当事务隔离级别设置为READ-COMMITTED(读已提交)时,在这种状态下,一个会话更新的数据不会被其他的会话马上看到,除非该更新的数据已被事务所提交(commit)。

总结:当一个会话的(session)事务隔离级别被设置为READ-COMMITTED时,那么它只可以看到其他会话已经提交的数据。

三、可重复读(REPEATABLE-READ)

当事务隔离级别设置为REPEATABLE-READ(可重复读)时,在这种状态下,同一个事务中的多次查询结果都是一致的(既不会出现不可重复读的现象),即使在此期间其他会话更新了数据,这些数据对其也是不可见的。

由此可见,当事务的隔离级别被设置为REPEATABLE-READ后,同一个事务中的select语句查出的结果都是一致的,其他事务在此期间提交的数据将对其不可见。

四、串行化(Serializable)

当事务隔离级别设置为SERIALIZABLE(串行读)时,在这种状态下,一个会话事务中的select操作将会阻塞其他事务的写(add、update和delete)操作,但不会阻塞读。

由此可以得出结论,当(session)事务的隔离级别被设置为SERIALIZABLE时,一个会话中的select操作会阻塞其他会话中的写操作,但不会阻塞select操作,而且一个会话中的写操作,会阻塞其他会话对同一条数据进行写操作。

设置:

一.查看当前会话隔离级别

select @@tx_isolation;

二.查看系统当前隔离级别

select @@global.tx_isolation;

三.设置当前会话隔离级别

set session transaction isolatin level repeatable read;

四.设置系统当前隔离级别

set global transaction isolation level repeatable read;

五.命令行,开始事务时

set autocommit=off; 或者 start transaction;

提交事务时

commit;

时间: 2025-01-15 09:55:36

MySQL的事务隔离级别以及设置的相关文章

MySQL数据库事务隔离级别(Transaction Isolation Level)

今天在学习JDBC的时候看到了关于MySql的事务的隔离级别的问题,感觉内容挺高级的,所以记录一篇文章,以备后面使用. 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. 2 [mysqld] 3 transaction-isolation = R

【MySQL之事务隔离级别】

本文通过实例展示MySQL事务的四种隔离级别. 1 概念阐述 1)Read Uncommitted(读未提交) 其他事务的在未提交的改动下,当前事务可以察觉. 2)Read Committed(读提交) 其他事务在提交改动之后,当前事务可以察觉,如果其他事务未提交改动,那么不会察觉. 3) Repeatable Read(可重复读) 其他事务提交了改动,并且当前事务也提交的操作,之后才可以察觉改动. 4) Serializable(可串行化的) 通过加锁方式,仅仅保持一个事务执行更新操作,如果其

MySQL之事务隔离级别--转载

转自:http://793404905.blog.51cto.com/6179428/1615550 本文通过实例展示MySQL事务的四种隔离级别. 1 概念阐述 1)Read Uncommitted(读未提交) 其他事务的在未提交的改动下,当前事务可以察觉. 2)Read Committed(读提交) 其他事务在提交改动之后,当前事务可以察觉,如果其他事务未提交改动,那么不会察觉. 3) Repeatable Read(可重复读) 其他事务提交了改动,并且当前事务也提交的操作,之后才可以察觉改

mysql中事务隔离级别可重复读说明

mysql中InnoDB引擎默认为可重复读的(REPEATABLE READ).修改隔离级别的方法,你可以在my.inf文件的[mysqld]中配置: transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE} 用户可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别.它的语法如下: SET [SESSION | GLOBAL] TRANSACT

MySQL基础——事务隔离级别

事务是DBMS得执行单位.它由有限得数据库操作序列组成得.但不是任意得数据库操作序列都能成为事务.一般来说,事务是必须满足4个条件(ACID) ①:原子性(Autmic):事务在执行性,要做到"要么不做,要么全做!",就是说不允许事务部分得执行.即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响! ②:一致性(Consistency):事务操作之后,数据库所处的状态和业务规则是一致的;比如a,b账户相互转账之后,总金额不变! ③:隔离性(Isolation):如果

[转]MySQL 数据库事务隔离级别

然后说说修改事务隔离级别的方法: 1. 全局修改,修改 mysql.ini 配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. 2 [mysqld] 3 transaction-isolation = REPEATABLE-READ 这里全局默认是 REPEATABLE-READ, 其实 MySQL 本来默认也是这个级别2. 对当前 session 修改,在登录 mysql 客户

MySQL数据库事务隔离级别

数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. 2 [mysqld] 3 transaction-isolation = REPEATABLE-READ 这里全局默认是REPEATABLE-READ,其实MySQL本来默认也是这个级别 2.对当

浅谈MySQL的事务隔离级别

希望这篇文章能够阐述清楚跟数据库相关的四个概念:事务.数据库读现象.隔离级别.锁机制 一.事务 先来看下百度百科对数据库事务的定义: 作为单个逻辑单元执行一系列操作,要么完全执行,要么完全不执行.事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源. 事务有四个属性,称为ACID属性: 1.原子性(Atomicity):事务是一个原子单位,要么全部执行,要么全部不执行. 2.一致性(Consistent):事务的开始和结束,数据都必须保持一致状态. 3.隔离性(i

Mysql 的事务隔离级别

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销.Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果.本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少.读取未提交的数据,也被称之为脏读(Dirty Read).Read Committed(读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的).