mysql事务隔离级别解读 叁歲伎倆 2022-01-27 07:45 145阅读 0赞 一、mysql事务隔离级别,有几种? 1.读未提交(read uncommitted),存在脏读、幻读可能 2.读提交(read committed),不会脏读,存在幻读可能 3.可重复读(repeatable read) - default,不会脏读,存在幻读可能 4.串行化(serializable ),不会脏读、幻读 二、场景分析: 1.假设数据表 T 中只有1列,存在1行记录 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RhaXl1ZG9uZzIwMjA_size_16_color_FFFFFF_t_70][] 2.进行事务并发 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RhaXl1ZG9uZzIwMjA_size_16_color_FFFFFF_t_70 1][] 结果分别是 读未提交: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][https_blog.csdn.net_daiyudong2020_article_details_90552734] End [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RhaXl1ZG9uZzIwMjA_size_16_color_FFFFFF_t_70]: /images/20220127/e90332eaabb04ce291f0a8a6197bc2bb.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RhaXl1ZG9uZzIwMjA_size_16_color_FFFFFF_t_70 1]: /images/20220127/0b5863cb46c54d1f92e3ed427fda5303.png [https_blog.csdn.net_daiyudong2020_article_details_90552734]: https://blog.csdn.net/daiyudong2020/article/details/90552734
还没有评论,来说两句吧...