2012-03-09 52 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