mysql 只读事物 川长思鸟来 2023-08-17 15:30 66阅读 0赞 MySQL版本: 8 网上搜了一下mysql的只读事物,说只读事物,只能读取到执行时间点前的内容,事物期间其他事物修改的内容不能读取到 从mysql执行结果来看上面说的确实是这样。但这个不能读取其他事物修改的内容,真的是由只读来控制的吗? 其实不然,事物读取其他事物变更的数据,还是由事物隔离级别来控制的,由于mysql默认的隔离级别是可重复读(其解决了不可重复读和幻读),所以就出现了”只读事物,只能读取到执行时间点前的内容,事物期间其他事物修改的内容不能读取到“这样的结论。 而mysql的只读事物只是用来控制当前事物不可进行增删改。 下面验证过程: A客户端执行如下命令: \# 设置事物只读 set session transaction read only; \# 设置事物隔离级别为 读未提交 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; \# 开启事物 SET autocommit=0; \# 查询 SELECT \* from user; ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70][] B客户端执行如下命令: \# 设置事物隔离级别为 读未提交 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; \# 开启事物 SET autocommit=0; \# 插入一条数据 INSERT into user (id, name, age) values (99912, "sfds", 90); 回到A客户端; \# 查询 SELECT \* from user; ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70 1][] 发现多了一条数据,所以只读并不能控制数据的变更 \#更新 UPDATE user set name = "ssss" where id = 999 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70 2][] 无法更新,也就是只读事物不可增删改 当连接被设置为只读事物后,想要修改为读写事物,在事物提交后,通过如下命令修改: set session transaction read write mysql驱动源码就是这样做的, ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70 3][] 如果某个事物是只读事物,spring在该事物提交后,会将当前连接重置为默认的读写事物,调用的就是上面的方法,spring重置连接事物读写的代码在 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70 4][] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70]: /images/20230810/905a60eb4a8844eeae7b2829164644d7.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70 1]: /images/20230810/a4ffb7bd4dca431d9b42dc1d9ff9152e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70 2]: /images/20230810/467396f5b269488e8204d2147f9f5a30.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70 3]: /images/20230810/0072bf13a9554bc7b1db4c8b3722f049.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM4NTU4MDc2_size_16_color_FFFFFF_t_70 4]: /images/20230810/7b39d20777f044df948a35c686079781.png
还没有评论,来说两句吧...