正如上面标题normally
中所指出的,我所做的并不是改变表格以添加一列的正常方法。
我们正在使用MySql 5.5
和Toad
来执行数据库操作。有一个表appln_doc
有近300K的记录存储申请人的文件,如图像和太大的。
现在我们必须添加is_signature
类型的新列tinyint
。我们尝试了三种不同的方式
putty
我们记录在mysql
内并执行相同的查询。这三项努力都导致同样的问题Fixing “Lock wait timeout exceeded; try restarting transaction” for a 'stuck" Mysql table。所以我们试图杀死等待进程并再次尝试改变表格,结果仍然相同。
我们再次终止了该进程并重新启动了mysql
服务器并再次尝试添加该列,但问题仍然存在。
最后,我们将所有表格数据导出到Excel工作表并截断表格。之后,当我们尝试添加该列时,它成功了。然后,使用新列is_signature
添加了导出的Excel工作表,其中所有值均为0
,作为新列的默认值。然后我们再次将该数据导出回表中。这就是为什么我说我没有在normal way
中添加列。
那么有没有人遇到这样的情况并且有比这更好的解决方案?任何人都可以告诉为什么会发生这种情况是因为存储在该表中的数据的大小和大小?
PS:表appln_doc
有一个没有数据的子表appln_doc_details
。只有此表在更改时出现问题。
答案 0 :(得分:3)
在一天结束时,无论您使用什么工具,都归结为以下两种情况之一:
alter table
声明第一个通常更快,第二个通常更灵活(桌面有些东西不能改变)。
无论哪种方式,处理这么多数据只需要花费很多时间,而且你无法真正做到这一点。
从好的方面来说,几乎所有的超时都可在某处配置。我不知道如何配置这个特定的,但我99%肯定你可以。了解如何并将其增加到足够大。对于300K记录,我认为操作大约需要10分钟或更短时间,但当然这取决于。设置为10小时。 :)