事务的四种隔离级别
未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据
提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)
可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读
串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞
这里主要比较可重复读和读已提交的去呗
1 可重复读 mysql默认的事务隔离级别
在navicate打开2个页面模拟2个连接
在页面1 开启事务,查询一条数据 username = ck123
2 页面2 更新这条sql,然后查询,可知道结果已经更改为ck1234
3.重新回到页面一,在之前事务中继续查询(此时要把start transaction去掉,否则就是开启新的事务了),结果依旧是ck123
4.在页面1中提交事务,再次查询 就能查到别人更新的结果
二.读已提交 oracle 默认的隔离级别,在mysql中先将2个连接都设置为
读已提交
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT @@transaction_isolation;
在页面1中开启事务,查询数据
在页面2中更改数据
页面1中查询,可以直接读到更改的数据源