2012-03-09 80 views
0

因此,在創建我們的表的過程中,我們沒有足夠關注我們的系統,並且所有表都是使用InnoDB引擎創建的。這真的只是糟糕的,因爲我們想在一些列上有一個FULLTEXT索引。帶有外鍵的MySQL更改引擎

所以,現在我想轉換。雖然我在這裏,但我只想將所有表格轉換爲MyISAM,這樣如果我們在未來添加要編制索引的列,我們就有了這個選項。所以,我有我有以下.sql文件:

ALTER TABLE tableName1 Engine = MyISAM; 
ALTER TABLE tableName2 Engine = MyISAM; 

然而,當我嘗試運行它,我得到以下錯誤:

Error Code: 1217 Cannot delete or update a parent row: a foreign key constraint fails

正如你可能已經猜到了,我們有外鍵在我們的表中。不是我的風格,也不是我的部門,也不是我的創作劇本。

我的問題歸結爲,有沒有辦法改變這些表上的引擎而不必擦拭數據庫?

編輯:請注意,這將需要在數據庫的多個開發和測試副本上完成,所以我可以腳本的東西肯定是首選。

+0

可以去除FKS而不破的應用?或者只是像Solr那樣爲全文索引實現一些更好的東西? – ceejayoz 2012-03-09 02:23:52

+0

@ceejayoz刪除FKs是一個選項,但不是我想要的,因爲我們有很多表。我將不得不通過每個表,找到外鍵並手動刪除它們。這將跨越多個開發和測試服務器。我想要一個方法來做到這一點,而不必這樣做。另外,Solr並不是真正的選擇。 – Ktash 2012-03-09 02:27:15

+0

如果你正在尋找一個簡單的,沒有工作解決方案,我想你會感到失望。 – ceejayoz 2012-03-09 03:41:23

回答

0

嗯,據我所知,有點但不是真的。 mysqldump數據庫並在轉儲的sql文件中編輯出外鍵約束。當然,更改CREATE TABLE腳本中的引擎。

+0

這是我考慮過的一個選項,但是我將不得不在多個數據庫上執行此操作,所以我可以使用腳本。 – Ktash 2012-03-09 02:30:06

0

InnoDB與MyISAM不同,它支持外鍵,並且具有很多很棒的功能,例如確保所有表完整性的事務性系統。 MyISAM表格現在往往會失敗,然後當您在表格中有大量數據時或出於其他許多原因時。
在不久的將來,InnoDB將實施全文搜索。我建議不要改變桌子的引擎,但有一些像獅身人面像的地方。 Sphinx比InnoDB的Fulltext Search更強大,更靈活。

更多關於InnoDB的全文搜索:
InnoDB Fulltext search

+0

獅身人面像不是一個選項。我的主機不允許長時間運行或永遠在線的進程。 – Ktash 2012-03-09 02:39:31