从myisam迁移到innodb时的参照完整性问题

时间:2010-07-08 21:24:37

标签: mysql innodb myisam

我想将我的一个数据库从myisam迁移到innodb。主要原因是允许我的申请尊重参照完整性。

这就是我做的事情

  1. 导出当前的myisam数据库
  2. 删除了数据库
  3. 切换到innodb数据库http://parasjain.net/2010/06/08/how-to-switch-to-innodb-database-in-mysql/
  4. 验证了引擎开关,然后创建了新数据库
  5. 参照完整性现在有效。例如,如果我创建父p1和子c1并在c1中引用p1,只要存在依赖于它的子项,我就无法删除P1。

    到目前为止一切顺利

    但是当我从导出的转储中导入旧数据时会出现问题

    问题在于参考完整性适用于新数据。但是在我现有的数据中,如果存在c2引用的p2之类的任何关系,那么我可以删除p2,破坏参照完整性。 c2现在是孤儿。

    有没有办法修复/重新索引表,以便对现有数据实施参照完整性?

2 个答案:

答案 0 :(得分:0)

确保所有外键和引用键都有新索引(每个插入时都更新表索引)然后运行

ALTER TABLE you_table0 ADD FOREIGN KEY ...
每个表都有

,所有遗留数据都已到位。

应该工作)

答案 1 :(得分:0)

感谢您的回答。这本来是有用的,因为这会让我找到根本原因。问题的根本原因是我的mysqldump包含drop和create语句。创建语句具有ENGINE = MYISAM,因为在导出时这是引擎。

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