首要了解的概念:

session 只是对当前会话有效;

global 对非当前会话的新会话有效;

设置不同隔离级别语句如下:

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE


SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED

SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ

SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE

查看语句如下(tx_isolation和transaction_isolation都可以):

select @@session.tx_isolation;

select @@global.tx_isolation;

select @@session.transaction_isolation;

select @@global.transaction_isolation;

了解了这些之后就可以测试一下子,使用navicat和idea自带的database都可以,怎么顺手怎么来,我这里用idea自带的database,如下所示;

下面开始测试:

1.设置session 的隔离级别为读未提交

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

此时只有该session可以看到修改效果;

其它session不会受到影响;

将session隔离级别设置回可重复读

现在修改全局的隔离级别为读未提交,

SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

此时查看本session效果;

再查看全局事务

新开一个界面,效果如下

 而对于之前打开的session不受影响;

测试完成;

对于脏读、不可重复度读的问题这里就不测试了;

这里加点料:

将事务修改回可重复读,此时数据如下:

再次开启俩个窗口,在窗口B中执行按name的修改

再在窗口A中执行修改操作,会发生死锁;

原因:窗口B由于未建立索引 直接将表锁住;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐