2014-01-13 44 views
2

我想從表中刪除外鍵約束,這需要很長時間,我不知道在生產環境中執行此操作時會發生什麼樣的壞事。MySQL:在InnoDB表上刪除外鍵約束

ALTER TABLE table DROP FOREIGN KEY fk_my_foreign_key; 
  1. 爲何需要那麼久嗎?
  2. 我可以加快速度嗎?
  3. 是否安全地中斷中間的過程?
  4. 在生產服務器上運行這樣的操作是否有任何副作用?
  5. 當alter table失敗(丟失與服務器的連接)時是否存在任何一致性問題?在這種情況下,如果無法使用其他配置(最大數據包大小)重新啓動服務器,該怎麼辦?根據要求

的更多信息:

  • MySQL服務器版本:34年5月5日
  • 外鍵引用在同一個表
  • 表中列有行的8000萬左右
  • 關鍵+表上的約束,ON UPDATE CASCADE ON DELETE CASCADE

在大多數情況下,ALTER TABLE通過創建 原始表的臨時副本來工作。對副本執行更改,然後刪除原始表,並重新命名新表。當ALTER TABLE正在執行時,原始表可由其他會話讀取。 對錶進行更新和寫入操作會停止,直到新表準備好 ,然後自動重定向到新表,而不會有 任何失敗的更新。謝謝。

其他情況呢?我可以防止這種鎖嗎?

+0

您需要添加更多關於您的環境的數據。首先服務器版本,那麼你的表格是多少,它們有多大。 –

+0

編輯,謝謝 – Aki

+0

確實更新/刪除級聯 – Aki

回答

-2

首先,我必須說最佳做法總是在脫機環境中測試這種變化。

複製是否使用表?如果是這樣,你需要先刪除它。此外,如果該表當前正在使用,它可能會被鎖定在一個進程中,請檢查活動監視器並查找死鎖。這是一個好主意,以確保密鑰也沒有被任何索引引用

要安全和正確地刪除外鍵,有許多詳細的文章,可以在谷歌找到。