首页 > 解决方案 > MySQL失去连接->操作完成?

问题描述

我有一个 >19M 行的表,我想创建一个子表(我将表分成几个较小的表)。所以我正在做一个CREATE TABLE new_table (SELECT ... FROM big_table). 我在 MySQL Workbench 中运行查询。

该查询需要很长时间才能执行,因此最终我收到“与 MySQL 服务器的连接丢失”消息。但是,几分钟后,新表就在那里,它似乎包含了所有应该被复制的数据(我这样做GROUP BY不能只检查两个表中的行数是否相等)。

我的问题是:即使我失去与数据库的连接,我是否保证查询已完成?或者 MySQL 是否可以在中途中断查询并仍然留下不完整数据的表?

标签: mysqldatabase-connectioncreate-table

解决方案


即使我失去与数据库的连接,我是否保证查询已完成?

不会。除了连接超时之外,还有其他几个原因会导致连接丢失错误。服务器可能由于磁盘空间用完或硬件故障而崩溃。管理员可能已终止您的会话。

“保证”在数据库管理领域是一个强有力的词。因为别人的数据。您不应该假设任何查询都正确运行到完成,除非它优雅地结束。

如果您之所以询问是因为隔夜查询失败并且您不想重复它,您可以检查表并使用诸如COUNT(*)说服自己已完成之类的东西。但请不要在生产中依赖这种黑客行为来处理他人的数据。


推荐阅读