为什么我需要在mysql(InnoDB)中回滚SELECT?

时间:2015-02-19 18:53:06

标签: mysql sql innodb sql-optimization

我在mysql数据库中的一个大型InnoDB表上运行了一个不明智的SELECT *

所以在10分钟左右后我意识到错误,找到了带有show processlist的connectionid,并试图用kill命令终止连接和查询。然后我在同一个表上运行了另一个查询。

show processlist显示原始选择已收到Killed标志,但卡在"发送数据"州。后续查询正在等待锁定。这已持续了几个小时。

现在我理解为什么,如果我的原始查询以任何方式修改了表格,我所描述的将等待回滚。

但这是select;回滚一个选择甚至意味着什么?

所以我想知道是否有人可以告诉我我在等什么,以及是否有任何方便的方法可以取消select查询。

1 个答案:

答案 0 :(得分:1)

正如其他人所说,你不是在等待交易回滚。我也遇到过这个问题:把它称为一个bug,因为它确实是MySQL,但MySQL并不同意。

现在我不能给你任何东西,只有一个有根据的猜测,因为你得到这个'僵局',但我可以给你一个解决方案:

UNLOCK TABLES http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html