一、mysql事务隔离级别,有几种?
1.读未提交(read uncommitted),存在脏读、幻读可能
2.读提交(read committed),不会脏读,存在幻读可能
3.可重复读(repeatable read) - default,不会脏读,存在幻读可能
4.串行化(serializable ),不会脏读、幻读
二、场景分析:
1.假设数据表 T 中只有1列,存在1行记录
2.进行事务并发
结果分别是
读未提交:v1=2,v2=2,v3=2(B修改后,不需要提交事务,A就可以查到最新值)
读提交:v1=1,v2=2,v3=2(B修改后,需要提交事务,A才可以查到最新值)
可重复读:v1=1,v2=1,v3=2(可重复读的意思是,事务A在开始时,复制了一份V1的镜像值,后续都是读镜像值)
串行化:v1=1,v2=1,v3=不确定 (事务B必须在事务A执行完才可以执行)
三、基于可重复读的默认事务隔离级别,如何解决秒杀商品的超卖问题。
mysql有个概念称为"当前读",current read,也就是说更新数据的语句中的读,都是读最新值。假设v是库存,语句如下
update v=v-100 where v>=100;
原文出自:https://blog.csdn.net/daiyudong2020/article/details/90552734
End