mysql设置隔离级别
首要了解的概念:session 只是对当前会话有效;global 对非当前会话的新会话有效;设置不同隔离级别语句如下:SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDSET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTEDSET SESSION TRANSACTION ISOLATI
·
首要了解的概念:
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由于未建立索引 直接将表锁住;
更多推荐
已为社区贡献3条内容
所有评论(0)