mysql事务隔离级别

准备命令:

//查看隔离级别

select @@global.tx_isolation, @@tx_isolation; 

//修改当前会话隔离级别

set session tx_isolation='read-uncommitted';

set session tx_isolation='read-committed';

set session tx_isolation='repeatable-read';

 

Read Uncommitted

在两个会话执行如下操作,

 

会话一:未提交 

会话二:可以看到未提交的结果

Read Committed

修改会话隔离级别如上(略)

会话一:第一步,开启事务,查询数据

 

会话二:第一步,开启事务,更新数据,但不提交

会话一:第二步,在同一事务下,再次执行查询,看不到会话二未提交的数据

当会话二提交后,会话一方可看到修改后的结果。

但会出现"不可重复读",如下:

会话一:开启事务,先执行第一次查询

会话二:开启事务,执行update操作并提交

会话一:保持之前开启的事务,执行第二次查询,和第一次的结果不一样,查询到了中间会话二提交的内容(行级锁,不锁间隙)

Repeatable Read(可重读)

解决"可重复读"

会话一:开启事务,先执行第一次查询

会话二:开启事务,执行update操作并提交

会话一:保持之前开启的事务,执行第二次查询,和第一次的结果一样,查询不到中间会话二提交的内容(行级锁且是锁间隙)

如下:

幻读:指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。

InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化) 

posted @ 2016-05-30 10:43  小N~  阅读(214)  评论(0编辑  收藏  举报