数据库隔离级分为4种:
1.未提交读:
就是在一个事物中包含修改表的操作;在事物操作过程中,其他读取操作会读取,这个事物还没提交时已经修改的数据。因为这时候事物还没有提交,有可能回滚,这时候读取的数据是还没有持久化的。这种情况叫做“脏读”。
2.提交读:
顾名思义,只有事物提交之后才能读取数据。也叫“不可重复读”。A事物的改变表中数据,B事物在A事物执行前后读取数据不一致。
3.可重复读:
同一个事物内多次读取数据结果一致,这时候又会有一个问题“幻读”。事物如果不是独立执行的,A事物包含B事物,A事物将感觉不到B事物的执行结果。Innodb通过并发空值解决“幻读”。
4.串行化:
将事物串行化,这种做法消耗资源太大,一般没有高度一致性的要求不会采用这种隔离级别。
下面介绍隔离级别的设置:
在MySQL中设置事务隔离级别有2种方法:
1 在my.cnf中设置,在mysqld选项中如下设置
[mysqld]
transaction-isolation = READ-COMMITTED
2 在mysql窗口用set命令重置
- mysql> set global tx_isolation='REPEATABLE-READ';
- Query OK, 0 rows affected (0.01 sec)
- mysql>
查询当前的会话事务级别,可以使用:
- mysql> select @@tx_isolation;
- +----------------+
- | @@tx_isolation |
- +----------------+
- | READ-COMMITTED |
- +----------------+
- 1 row in set (0.00 sec)
- mysql>
查询全局的事务隔离级别,可以使用
- mysql> select @@global.tx_isolation;
- +-----------------------+
- | @@global.tx_isolation |
- +-----------------------+
- | READ-COMMITTED |
- +-----------------------+
- 1 row in set (0.00 sec)
- mysql>
在Serializable模式下。
- mysql> system cat /usr/local/mysql56m2/my.cnf |grep transaction-isolation
- transaction-isolation = READ-COMMITTED
- mysql>