imgimg第一步:A开启事务:start tracsaction;img第二步:A查询数据:select * from test;img第三步:B开启事务:start transaction;img第四步:B查询数据:select * from test;img第五步:B更新数据:update test set num =10 where id = 1;B没有提交事务img第六步:A读取数据----A读取到了B未提交的数据(当前数据库的隔离级别是:Read Uncommitted)img第七步:B回滚数据:rollback;img第八步:B查询数据:select * from test;img第九步:A查询数:select * from test;img结论:事务B更新了数据,但是没有提交,事务A读取到的是B未提交的记录。因为造成脏读。Read Uncommitted是最低的隔离级别
实验二:读取已提交-Read Committed
前置条件:将数据库的隔离级别设置为:Read Committed;
set session transaction isolaction level Read Committed;
imgimg第一步:A开始事务:start transaction;img第二步:A查询数据:select *from test;img第三步:B开启事务:start transaction;img第四步:B查询数据:select * from test;img第五步:B更新数据:update test set num =10 where id=1查看结果:img第六步:A查询数据:select * from test;img第七步:B提交数据:commit;img第八步:A查询数据:select * from test;img结论:Read Committed 读已提交的隔离级别解决了脏读的问题,但是出现了不可重复读的问题,即事务A在两次查询的结果不一致,因为在两次查询之间事务B更新了一条数据。读已提交的只允许读取已经提交的记录 ,但是不要求可重复读
实验三:可重读度-Repeatable Read
前置条件:将数据库的级别设置为可重复度set session transaction isolation level repeatable read;img第一步:A开始事务:start transaction;img第二步:A查询数据:select * from test;img第三步:B开启事务:start transaction;img第四步:B查询数据:select * from test;img第五步:B更新数据:update test set num=10 where id=1;img此时B并没有提交事务第六步:B查询数据:select * from test;img第七步:A查询数据img结果仍然是之前的结果(因为B事务还没有提交)第八步:B提交事务:commit;img第九步:A查询数据:select * from test;此时A查询的记录仍然和之前一样img第十步:B插入一条数据并提交事务:inset into test(num) value(4);img第十一步:A查询数据,发现结果还是和之前的一样:select * from test;img第十二步:A提交事务并查询数据img此时发现A查询的数据已经和B查询的结果一致了;结论:Repeatable Read隔离级别只允许读取已经提交的事务的记录,