我有MySQL數據庫約5GB大小和約200表。所有的表都有我想要刪除的前綴,我發現了一些想法。如何刪除InnoDB數據庫中的MySQL表前綴與約束
問題是此數據庫通過使用CONSTRAINT ... FOREIGN KEY進行參照完整性檢查。
如何從表中刪除前綴,包括約束的更改,而無需手動修改或刪除約束?
我有MySQL數據庫約5GB大小和約200表。所有的表都有我想要刪除的前綴,我發現了一些想法。如何刪除InnoDB數據庫中的MySQL表前綴與約束
問題是此數據庫通過使用CONSTRAINT ... FOREIGN KEY進行參照完整性檢查。
如何從表中刪除前綴,包括約束的更改,而無需手動修改或刪除約束?
不幸的是你不得不輟學,並根據對rename table MySQL文檔創建外鍵:
指向重命名錶的外鍵被自動更新 。在這種情況下,您必須刪除並重新創建外鍵 以使它們正常工作。
我發現了一個想法,將整個數據庫導出到sql腳本並對其進行字符串替換,然後導入它。這不是很有說服力。 – raph
使用在information_schema
(主要是TABLES
和COLUMNS
)表來構建你需要的代碼。也許3個腳本將是明智的:
SELECT CONCAT('ALTER TABLE ', table_name, ' DROP FOREIGN KEY ' ...) FROM ...
SELECT CONCAT('RENAME TABLE ', ...
SELECT CONCAT('ALTER TABLE ', table_name, ' ADD FOREIGN KEY ' ...) FROM ...
然後手動將3個腳本復制並粘貼到mysql的命令行工具。
至於刪除前綴,請看字符串函數MID
,LOCATE
,SUBSTRING_INDEX
等,看看有什麼用。
重命名錶手冊中提到「指向重命名錶的外鍵不會自動更新,在這種情況下,**必須刪除並重新創建外鍵才能正常工作。**」 –
不重命名錶(http://dev.mysql.com/doc/refman/5.7/en/rename-table.html)的工作? –