如果在长时间操作期间连接丢失会发生什么?
例如,有一个select语句需要几分钟才能完成,并且在执行期间连接会丢失.它会继续执行还是会停止?
对于删除语句:当客户端断开连接时,它是执行完成还是中断?数据将会发生什么:它会在多长时间内提交或回滚?
对于ddl操作:我有一个长时间运行的alter table tbl_name move操作,当客户端失去连接时会发生什么?会继续执行还是会被打断?
我假设我们正在讨论的东西类似于客户端应用程序崩溃或网络连接被丢弃而不是应用程序正在执行干净断开连接的情况,因为在事务处于打开状态时无法进行干净的断开连接声明正在运行.
一般情况下,该语句将运行到服务器(其中,"完成"了上完成SELECT是它可以返回第一组行的客户端请求可能会或可能不会需要执行的全部语句的点).然后,服务器将尝试将结果准备好的事实传达给客户端.当它没有得到响应时(可能需要几分钟才能超时等待ACK数据包),它知道客户端进程已经死了并开始回滚未提交的事务(释放所有已锁定的事务)通过交易).如果您作为事务的一部分对数据库进行了更改(即,您已完成插入,更新和/或删除),则可能需要花费很长时间来回滚更改,因为它首先生成更改.