0
点赞
收藏
分享

微信扫一扫

具体分析mysql数据库的事务问题包括隔离级别


具体分析mysql数据库的事务问题包括隔离级别

具体分析mysql数据库的事务问题包括隔离级别_数据库


具体分析mysql数据库的事务问题包括隔离级别_数据库_02


具体分析mysql数据库的事务问题包括隔离级别_数据_03


解决的问题越多,一致性越好,并发性越差,性能越差

具体分析mysql数据库的事务问题包括隔离级别_mysql_04


具体分析mysql数据库的事务问题包括隔离级别_数据_05


具体分析mysql数据库的事务问题包括隔离级别_mysql_06


使用命令行的模式来演示事务的隔离级别

1、开启了两个连接

具体分析mysql数据库的事务问题包括隔离级别_隔离级别_07


使用的数据库的表是:

具体分析mysql数据库的事务问题包括隔离级别_mysql_08


2、确定数据库

具体分析mysql数据库的事务问题包括隔离级别_隔离级别_09


3、show tables

具体分析mysql数据库的事务问题包括隔离级别_数据库_10


4、查看当前的默认隔离级别

具体分析mysql数据库的事务问题包括隔离级别_数据库_11


5、查看当前是否为默认提交事务

select variables like ‘%autocommit%’;

具体分析mysql数据库的事务问题包括隔离级别_数据库_12


6、现在还没有修改自动提交为false,先查看表的数据

具体分析mysql数据库的事务问题包括隔离级别_隔离级别_13


7、左边的事务修改数据之后,右边的事务去读取,读取到了更新后的数据。原因是因为默认自动提交事务

具体分析mysql数据库的事务问题包括隔离级别_mysql_14


8、现在都设置自动提交为false

set autocommit=false;

具体分析mysql数据库的事务问题包括隔离级别_数据_15


9、

左边的事务修改的了数据,但是未提交

右边的事务去读取数据,并没有读取到修改后的数据,说明隔离级别为repeatable read 的隔离级别解决了脏读的问题,只要不提交,就读不到。

具体分析mysql数据库的事务问题包括隔离级别_mysql_16


10、这个时候左边事务提交了,但是右边的事务还是没有读取到,这就是repeatable read可重复读,只要你没有关闭当前事务(右边),那你读取到的数据永远是修改之前的数据。

具体分析mysql数据库的事务问题包括隔离级别_数据库_17


11、这时候,我结束右边的事务(commit一下就意味着当前事务结束了),然后再去读取数据,发现可以读到新的数据

具体分析mysql数据库的事务问题包括隔离级别_mysql_18


这就是repeatable read 的隔离级别。如果不关闭当前事务,读取到的永远是修改之前的数据。12、准备修改隔离级别,修改之前查看一下

具体分析mysql数据库的事务问题包括隔离级别_数据库_19


13、修改全局的事务隔离级别为read commit

而且这个时候立马去查隔离级别,显示的还是repeatable read

这个时候需要ctrl+C,退出mysql,再次进去,然后再查一次发现变成了read commited;当然因为我们修改的是全局的隔离级别,对于左边的事务同理也需要再次去关闭一下才能查看发现已经改好了。

具体分析mysql数据库的事务问题包括隔离级别_数据_20


具体分析mysql数据库的事务问题包括隔离级别_隔离级别_21


左边事务:

具体分析mysql数据库的事务问题包括隔离级别_数据库_22


14、这个时候二者的隔离级别都修改成read committed了。

因为重新进来mysql服务,所以,先设置自动提交为false

具体分析mysql数据库的事务问题包括隔离级别_数据_23


15、使用数据库

具体分析mysql数据库的事务问题包括隔离级别_mysql_24


16、修改之前查看user_table的数据

具体分析mysql数据库的事务问题包括隔离级别_数据库_25

17、左边事务来修改数据且不提交

具体分析mysql数据库的事务问题包括隔离级别_mysql_26


read committed隔离级别读取不到未提交的数据

18、左边事务提交,右边再去查询

具体分析mysql数据库的事务问题包括隔离级别_隔离级别_27


这个时候,就已经读取到了修改并且提交了的数据。其实这种现象我们可以接收,你如果操作数据库,修改了数据并且提交了,在我不关闭当前事务的前提下去读取数据,可以读取到你已经提交的事务,是可以的,情有可原的,所以oracle数据库默认的隔离级别采用的是这种情况。但是mysql就不行,必须关闭当前事务(语句写成commit)才能读取到数据库中已经提交的数据。19、设置隔离级别为读未提交read uncommitted;同理,左右两边都需要重新启动mysql连接

才能查看到当前的隔离级别已经发生改变

具体分析mysql数据库的事务问题包括隔离级别_数据库_28


右边事务:

具体分析mysql数据库的事务问题包括隔离级别_隔离级别_29


左边事务:

具体分析mysql数据库的事务问题包括隔离级别_数据_30


现在二者的隔离级别都已经设置成read uncommitted

具体分析mysql数据库的事务问题包括隔离级别_mysql_31


20、修改数据之前,设置自动提交为false先查看当前数据表中的数据

修改左边的数据,且不提交

具体分析mysql数据库的事务问题包括隔离级别_隔离级别_32


具体分析mysql数据库的事务问题包括隔离级别_mysql_33

我们发现。右边事务读取到了左边事务修改并且未提交的数据
所以隔离级别为read uncommitted的并没有解决脏读的情况。


举报

相关推荐

0 条评论