2010-07-08 129 views
0

我想将我的一个数据库从myisam迁移到innodb。主要原因是允许我的应用程序遵守参照完整性。从myisam迁移到innodb时的参照完整性问题

这是我做过什么

  1. 导出当前的MyISAM数据库
  2. 丢弃数据库
  3. 切换到InnoDB的数据库http://parasjain.net/2010/06/08/how-to-switch-to-innodb-database-in-mysql/
  4. 验证的发动机开关,然后创建新的数据库

现在,参照完整性起作用。例如,如果我创建父p1和子c1并在c1中引用p1,则只要存在依赖它的子项,我就不能删除P1。

到目前为止好

但是,当我从导出转储

的问题是,参照完整性很荣幸为新的数据导入旧数据出现问题。但是在我现有的数据中,如果有任何关系像c2那样引用p2,那么我可以删除p2以打破引用完整性。 c2现在是孤儿。

是否有修复/重新索引表的方法,以便对现有数据执行参照完整性?

+0

你可以从'SHOW CREATE TABLE'为两个受影响的相关表发布输出吗? – Mike 2010-07-08 22:53:12

回答

0

感谢您的回答。这会很有用,因为那会导致我的根本原因。问题的根本原因是我的mysqldump包含drop和create语句。由于在导出时这是引擎,所以创建语句具有ENGINE = MYISAM。

我使用--no-create-info选项创建了新的转储,一切正常。

0

确保你有你的所有外键新鲜的指标和参考键(表索引更新每一个刀片),然后在地方跑

ALTER TABLE you_table0 ADD FOREIGN KEY ... 

为每个表,您的所有遗留数据已经。

应该工作)