mysql-事务隔离级别
查看事务级别:show variables like ‘tx_isolation’;下述为mysql默认的事务级别——可重复读
改变事务级别:
mysql> set global transaction isolation level read committed; //全局的
mysql> set session transaction isolation level read committed; //当前会话
1、READ UNCOMMITTED 读未提交——脏读
先将事务级别设置为READ UNCOMMITTED
同时开启两个事务。如下图,这个级别下,事务1会读到事务2未提交的内容,称为脏读。
2、READ COMMITTED 读已经提交——不可重复读
为了解决脏读的问题,我们只需要让事务不能访问其它事务未提交的内容。这个级别干的就是这个事。先把事务级别设置成READ COMMITTED
测试:
上述测试事务1不会读到事务2未提交的更新内容
这个级别会造成另外一个问题,不可重复读:一个事务中两次读取的内容不一样。
事务1读,事务2更新
3、REPEATABLE READ 可重复读。
REPEATABLE REDA可重复读级别,在读已提交的基础上,增加了读一致性(这边没有保证更新和插入的一致性,只是导致幻读的根源),即多次读取结果一样。
事务2的更新操作提交以后,事务1任然看不到改变。只有当事务1提交,再次开启事务才能看见。
这个锁级别下会造成的问题——幻读,现象如下:
不可重复读主要是update操作导致,一个事务两次读取,可能会读到不一致的内容。幻读主要是insert和delete导致,导致读取的数据和实际的不一致。
4、SERIALIZABLE 串行
所有事务串行执行。
还没有评论,来说两句吧...