2010-06-11 74 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

或類似的東西。

相關問題