2016-02-27 80 views
0

我有MySQL數據庫約5GB大小和約200表。所有的表都有我想要刪除的前綴,我發現了一些想法。如何刪除InnoDB數據庫中的MySQL表前綴與約束

問題是此數據庫通過使用CONSTRAINT ... FOREIGN KEY進行參照完整性檢查。

如何從表中刪除前綴,包括約束的更改,而無需手動修改或刪除約束?

+0

重命名錶手冊中提到「指向重命名錶的外鍵不會自動更新,在這種情況下,**必須刪除並重新創建外鍵才能正常工作。**」 –

+1

不重命名錶(http://dev.mysql.com/doc/refman/5.7/en/rename-table.html)的工作? –

回答

0

不幸的是你不得不輟學,並根據對rename table MySQL文檔創建外鍵:

指向重命名錶

的外鍵被自動更新 。在這種情況下,您必須刪除並重新創建外鍵 以使它們正常工作。

+0

我發現了一個想法,將整個數據庫導出到sql腳本並對其進行字符串替換,然後導入它。這不是很有說服力。 – raph

0

使用在information_schema(主要是TABLESCOLUMNS)表來構建你需要的代碼。也許3個腳本將是明智的:

  1. SELECT CONCAT('ALTER TABLE ', table_name, ' DROP FOREIGN KEY ' ...) FROM ...
  2. SELECT CONCAT('RENAME TABLE ', ...
  3. SELECT CONCAT('ALTER TABLE ', table_name, ' ADD FOREIGN KEY ' ...) FROM ...

然後手動將3個腳本復​​制並粘貼到mysql的命令行工具。

至於刪除前綴,請看字符串函數MIDLOCATESUBSTRING_INDEX等,看看有什麼用。