您的位置:首页 > 数据库 > MySQL

mysql的事务隔离级别

2016-04-17 19:38 344 查看
一、隔离级别的设置

1、查看级别:select @@tx_isolation

2、设置级别

(1)mysql事务级别

l  READ UNCOMMITTED 脏读、不可重复读、虚读有可能发生。

l  READ COMMITTED 避免脏读的发生,不可重复读、虚读有可能发生。

l  REPEATABLE READ 避免脏读、不可重复读的发生,虚读有可能发生。

l  SERIALIZABLE 避免脏读、不可重复读、虚读的发生。

(2)设置

mysql 默认REPEATABLE READ模式,更改方法有两种:

set transaction isolation level 级别(有的版本失效);

set tx_isolation='read-committed';(一次连接中有效,断开后,恢复默认)

3、关于脏读,不可重复读,虚读

时间

T1

T2

说明

t1

start transaction

 

 

t2

select * from account where name='aaa';

有1000块

 

 

t3

 

start transaction

 

t4

 

update account set money=money+100 where name='aaa';

 

t5

select * from account where name='aaa';

有1100块

 

读到了另外一个线程中未提交的数据:脏读

t6

 

commit;

 

t7

select * from account where name='aaa';

有1100块

 

读到了另外一个线程中提交的update数据:不可重复读

t8

select count(*) from account;

有3条记录

 

 

t9

 

insert into account values(4,'ddd',1000);

 

t10

select count(*) from account;

有4条记录

 

读到了另外一个线程中提交的insert数据:虚读(幻读)

t11

commit;

 

 

 

 

 

 

4、Java中的设置

//设置隔离级别

public class IsolationLevelDemo {
@Test
public void test1() throws Exception{
Connection conn = JdbcUtil.getConnection();
//一定要在开启事务前更改隔离级别
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
conn.setAutoCommit(false);

// ....
conn.commit();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 事务