0

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

这就是我所做的

  1. 导出当前 myisam 数据库
  2. 删除了数据库
  3. 切换到 innodb 数据库http://parasjain.net/2010/06/08/how-to-switch-to-innodb-database-in-mysql/
  4. 验证引擎开关,然后创建新数据库

参照完整性现在有效。例如,如果我创建 Parent p1 和 Child c1 并在 c1 中引用 p1,我不能删除 P1,只要有一个 child 依赖它。

到现在为止还挺好

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

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

是否有任何方法可以修复/重新索引表,以便对现有数据也实施参照完整性?

4

2 回答 2

0

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

ALTER TABLE you_table0 ADD FOREIGN KEY ...

对于每个表,您的所有旧数据都已经到位。

应该管用 )

于 2010-07-08T22:28:11.503 回答
0

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

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

于 2010-07-09T15:16:14.657 回答