
MySQL数据库四种隔离级别的演示
发布日期:2021-05-06 23:58:25
浏览次数:25
分类:原创文章
本文共 1156 字,大约阅读时间需要 3 分钟。
1.事务之间的隔离性
第一级别:读未提交(read uncommitted)
数据在内存当中,没还没有写入硬盘,极其不稳定,如果断电数据将会丢失。
对方事务还没有提交,我们当前事务可以读取到对方未提交的数据。
读未提交存在脏读(Dirty Read)现象:表示读到了脏的数据。
(事务一开启后,事务二尽管没有commit,事务一都能读到事务二修改的数据。)
第二级别:读已提交(read committed)
对方事务提交之后的数据我方可以读取到。
这种隔离级别解决了: 脏读现象没有了。
读已提交存在的问题是:不可重复读。
(事务一开启后,只有事务二commit后,事务一才能读到事务二修改的数据。)
第三级别:可重复读(repeatable read) MySQL默认的隔离级别
这种隔离级别解决了:不可重复读问题。
这种隔离级别存在的问题是:读取到的数据是幻象。
(事务一开启后,尽管事务二已经commit,事务一仍然读到的是 起初开启事务那一刻的数据。)
造成 幻读 :意思就是实际上数据库的数据已经真实的发生了改变,但是此时事务读到的数据仍然是旧的数据。
第四级别:序列化读/串行化读(serializable)
解决了所有问题。
效率低。需要事务排队。
2.演示隔离级别
1.读未提交(read uncommitted)
设置事务的全局隔离级别:set global transaction isolation level read uncommitted; 查看事务的全局隔离级别:SELECT @@global.transaction_isolation;
(mysql8.0 之后由 SELECT @@global.tx_isolation --> SELECT @@global.transaction_isolation; )
2.读已提交(read committed)
设置事务的全局隔离级别:set global transaction isolation level read committed;
3.可重复读(repeatable read)
设置事务的全局隔离级别:set global transaction isolation level repeatable read;
4.序列化读/串行化读(serializable)
设置事务的全局隔离级别:set global transaction isolation level serializable;
两个终端开启事务后,操作同一张表。会形成互斥。另一个事务需要等待 正在操作的事务完成后,才能恢复正常。
事务一 一旦提交结束该事务, 事务二就能正常操作了;马上得出了查询结果