今天的文章,其实来自真实的面试题,而且还比较有趣,所以忍不住分享出来。
直接开始吧。
我们知道,mysql数据库,为了得到更高性能,一般会读写分离,主库用于写操作,比如用于执行insert,update操作,从库用于读,也就是最常见的select操作。像下面这个图这样。
mysql读写分离虽然主库一般用于写操作,但也是能读的。那么今天的问题来了。
主库更新后,主库都读到最新值了,从库还有可能读到旧值吗?
主库更新后,从库都读到最新值了,主库还有可能读到旧值吗?
毕竟面试官都这么问了,那当然是有可能的,那至于是为啥,以及怎么做到的,今天我们来好好聊聊。
正常的主从更新流程比如我在主库和从库都有张user表,此时有以下两条数据。
数据库原始状态正常情况下,我们往主库执行写操作,比如更新一条数据,执行
updateusersetage=50whereid=1;
虽然这是一个单条写操作,但本质上可以理解为单条语句的事务。等同于下面这样
begin;updateusersetage=50whereid=1;