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;