2010-06-11 75 views
2

我有一个mysqldump文件是从产品的早期版本创建的,无法导入到产品的新版本中,因为db结构稍有变化(主要是改变了不是NULL DEFAULT 0到UNIQUE KEY DEFAULT NULL)。在导入之前更改mysqldump文件

如果我只是导入旧的转储文件,它将会出错,因为默认值为0的列现在会破坏UNIQUE约束。

要手动更改mysqldump文件或导入到临时表并将其更改,然后复制到新表中将很容易。但是,有没有办法以编程方式执行此操作,因此它是可重复的而不是手动的? (这将需要为此产品的许多实例发生)。

我在想,像是禁用导入的关键约束,然后将所有值= 0设置为NULL,然后重新启用关键约束?

这可能吗?任何帮助赞赏。

回答

3

是的。

SET UNIQUE_CHECKS = 0;关闭唯一密钥约束
SET FOREIGN_KEY_CHECKS = 0;关闭外键约束

导入文件 更新0为Null

SET UNIQUE_CHECKS = 1重新开启
SET FOREIGN_KEY_CHECKS = 1重新开启

+0

感谢Gary--我结束了删除索引和然后进行导入和转换,然后重新应用索引 - 我读过UNIQUE_CHECKS有一些奇怪的行为,并且您写的这些语句不起作用。 理论似乎工作,但感谢您的意见! – julio 2010-06-11 22:33:07

0

您可以使用sed并以自动的,可补充的方式修改转储文件。

sed s/NOT NULL DEFAULT 0/UNIQUE KEY DEFAULT NULL/g

或类似的东西。