mysql flush table的使用

发布时间 2023-06-20 13:08:52作者: 北方白杨

会话1:select sleep(500) from t_biz1 where .....

会话2: set session wait_time_out = 5000; flush tables with lock; 

会话3: select * from t_biz1 where ....

会话4: select * from t_biz2 where ....

会话5:unlock tables;

 

要保证

会话1的sleep时间大于会话2 

会话1执行后,立刻执行会话2,此时会话1在执行,会话2阻塞住

再执行会话4,可以正常执行(因为这个表是在flush之后的发起select的)

再执行会话3,阻塞。此时其实是被会话2阻塞住了

如果会话1结束,会话2开始执行,会话3仍然阻塞

会话5执行后,会话3没才会结束阻塞开始执行,如果会话3超时就会有异常抛出