多语言展示
当前在线:368今日阅读:84今日分享:32

mysql隔离级别操作理解

对于mysql对应的四种隔离级别,看了一遍过了一段时间总是又忘记了,这次上手操作一下彻底弄明白,之后就不会忘记了。四种级别:读未提交(read-uncommitted),Read Committed(读取提交),Repeatable Read(可重读),Serializable(可串行化) ,接下来一个个进行操作解析。
工具/原料

linux 下两个终端连接mysql,创建测试表test,两个字段id,name

方法/步骤
1

read uncommitted,一个事务还未提交,他做的变更就能被其他事务看到。出现脏读的现象,A事务更新未提交,B事务读取更新后的数据,A回滚,B再次读取 前后不一致,可能出现脏读 不可重复读,幻读。以下操作要在两个终端分别进行执行。(左边终端作为A,右边终端作为B),首先查看当前的事务隔离级别(标识1)这也是mysql引擎innodb默认的隔离级别;设置级别为读未提交(标识2),设置后再次查看隔离级别已经变成了读未提交(标识3),A终端进行查看看数据库表中一条信息(标识4),此刻查出name是qaz,B终端开启事务(标识5),查询数据(标识6),进行数据更新操作(标识7),将id为1的name修改为123,此时事务尚未提交,A终端进行查询,发现name已经更新成了123(标识8),B终端进行事务回滚(标识9)之后,A终端再次查看发现name还是之前的qaz(标识10),在A整个查看信息的过程中会出现脏读(数次读取不一致),由于其他事务的更改但尚未提交造成数次读取不一致的情况。

2

read committed(读提交)开启两个窗口连接mysql,把隔离级别设置成读提交(步骤1),修改之后查看当前级别为读提交(步骤2),查看表test中id为1对应的名字为test(步骤3),在另一个窗口开启事务(步骤4),查看test中id为1对应的名字为test(步骤5),更新test表中name为wer(步骤6),回到之前窗口查看当前name依然为test(步骤7),另一个窗口提交事务(步骤8),查看提交后更新的 name为wer(步骤9)。

4

repeatable read(可重复读) 一个事务执行过程中看到的数据是一致的,未提交的更改对其他事务是不可见的。A事务查询符合条件的数据项,B在表中插入了一条数据刚好是符合A查询的条件并提交,A事务以同样的标准查询该表,发现两次查询结果不一致,出现了幻读。

5

serializable(串行读)    对应的一个记录会加读写锁,出现冲突的时候,后访问的事务必须等到前一个事务执行完成 才能继续执行。END

注意事项

理解的重点是亲自上手操作一遍,很多东西看了好几遍最后发现还是记不住,操作一遍胜过看好几遍

推荐信息