一、MYSQL事务隔离级别
MYSQL事务隔离级别支持:
read uncommitted(未提交读)
read committed(已提交读)
repeatable read(可重复读)
serializable(可串行化)
MYSQL默认的隔离级别是repeatable read。
二、隔离级别设置
查看MYSQL的隔离级别:
select @@tx_isolation;
设置MYSQL的隔离级别:
设置innodb的事务级别方法是:set 作用域 transaction isolation level 事务隔离级别;
其中,事务隔离级别,可选:
read uncommitted
read committed
repeatable read
serializable
例如:
set global transaction isolation level read committed; //全局的
set session transaction isolation level read committed; //当前会话
锁机制:
共享锁:由读表操作加上的锁,加锁后其他用户只能获取该表或行的共享锁,不能获取排它锁,也就是说只能读不能写
排它锁:由写表操作加上的锁,加锁后其他用户不能获取该表或行的任何锁,典型是mysql事务中
锁的范围:
行锁: 对某行记录加上锁
表锁: 对整个表加上锁
这样组合起来就有,行级共享锁,表级共享锁,行级排他锁,表级排他锁
read uncommitted隔离级别,当两个事务同时进行时,即使事务没有提交,所做的修改也会对事务内的查询做出影响,这种级别显然很不安全。但是在表对某行进行修改时,会对该行加上行共享锁;
read committed事务隔离级别,只有在事务提交后,才会对另一个事务产生影响,并且在对表进行修改时,会对表数据行加上行共享;
repeatable read事务隔离级别,当两个事务同时进行时,其中一个事务修改数据对另一个事务不会造成影响,即使修改的事务已经提交也不会对另一个事务造成影响。
在事务中对某条记录修改,会对记录加上行共享锁,直到事务结束才会释放。
serializable事务隔离级别最严厉,在进行查询时就会对表或行加上共享锁,其他事务对该表将只能进行读操作,而不能进行写操作。
参考:
MySQL数据库事务隔离级别(Transaction Isolation Level)
http://www.cnblogs.com/zemliu/archive/2012/06/17/2552301.html
Mysql事务隔离级别设置、详解和测试
http://blog.csdn.net/gukesdo/article/details/7350580