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、关于脏读,不可重复读,虚读
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();
}
}
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; | | |
| | | |
//设置隔离级别
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中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复