问题:
innodb ,如果一个session A开启事务读一条数据,另一个session B开启事务更新这条数据,那么B能够顺序提交吗?A又读到的是什么值呢?
MySQL默认情况下,答案为:B可以立即更改这个记录,但是A始终都读的是B修改前的数据,即使B已经提交了。
A只有提交了之后,再select,就看到B更新之后的数据了
MySQL有四种隔离级别:
1、未提交读
就是可以读到别人未提交的数据,显然,这个隔离级别最低,而且完全没意义,没实现真正的任何隔离!
2、提交读
事务只能读取到别人提交过了的数据,这个是oracle的默认隔离级别,应用到上面的案例,那么当B提交后,A能够立即读取到B所提交的数据,不管A是否已经提交。
3、可重复读
可重复读的意思就是,即使别人提交了新的记录,当前连接依然读到的是当前事务开始时的记录,也就是和当前事务开始时重复的,一样的值。MySQL默认就是该级别,也就是上面这个案例所展示的样子
4、串行化
这个级别最严,所有的读和写都会相互互斥,等待对方完成。应用到上面的案例,B将没办法更新记录,除非A提交或者回滚。
本文探讨了MySQL中InnoDB存储引擎的四种事务隔离级别:未提交读、已提交读、可重复读与串行化,并通过具体示例说明了不同隔离级别下,多个并发事务之间的交互情况。
929

被折叠的 条评论
为什么被折叠?



