Mysql事务并发带来的问题

1,脏读

A事务读取B事务尚未提交的更改数据,并在这个数据基础上操作。如果B事务回滚,那么A事务读到的数据根本不是合法的,称为脏读。在oracle中,由于有version控制,不会出现脏读。

第一个窗口:
set session transaction isolation level read uncommitted;
set global transaction isolation level read uncommitted;
set autocommit = 0;
insert into student values(4, 'zhaoxin');
rollback;
第二个窗口:
select * from student;
image.png

设置数据库的隔离级别为:读已提交(read committed)可解决这个问题

set session transaction isolation level read committed;
set global transaction isolation level read committed;
image.png

2,不可重复读

A事务读取了B事务已经提交的更改(或删除)数据。比如A事务第一次读取数据,然后B事务更改该数据并提交,A事务再次读取数据,两次读取的数据不一样。

第一个窗口:
set session transaction isolation level read committed;
set global transaction isolation level read committed;
set autocommit = 0;
select * from student;
select * from student;
commit;
第二窗口:
update student set name='zhangsan333333' where id = 3;
image.png

3,幻读

幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。
幻读错误的理解:说幻读是 事务A 执行两次 select 操作得到不同的数据集,即 select 1 得到 10 条记录,select 2 得到 11 条记录。这其实并不是幻读,这是不可重复读的一种,只会在 R-U R-C 级别下出现,而在 mysql 默认的 RR 隔离级别是不会出现的。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • --- layout: post title: "如果有人问你关系型数据库的原理,叫他看这篇文章(转)" date...
    蓝坠星阅读 923评论 0 3
  • https://www.runoob.com/mysql/mysql-transaction.html[https...
    王王王王王景阅读 21,370评论 4 23
  • 8:30-11:00 从深圳家出门到香港机场(2.5小时) 香港机场的空姐空少们 香港机场实际换汇,人民币50元=...
    Hannazhang阅读 663评论 3 0
  • 2019年10月8日,童年发小、老同学、老战友王书彬来开封参加原陸一军一师部分战友聚会。 聚会期间...
    高山信阅读 552评论 0 0
  • 作者 peter 马上就要去杭州了,好期待呀,所以昨天我自己就整理行李了。开始时很难,后来就感觉越来越容易了,先把...
    petermeng阅读 281评论 2 3

友情链接更多精彩内容