2011-11-18 93 views
0

我目前有一个基于MYISAM存储引擎的数据库,它有几千条记录。我想将我的数据库转换为InnoDb存储引擎。将数据复制到myisam的innodb

它不会是一个简单的ALTER存储引擎命令,因为我需要将外键添加到当前数据库模式(当前的MyISAM数据库模式确实有主键),然后再将其转换为InnoDb。

我的问题是,一旦我将数据库转换为InnoDb,将数据从当前的MYISAM引擎恢复为InnoDb引擎就像发射一个PhpMyAdmin实例并备份数据(减去数据库模式或结构)一样简单,并且然后将其恢复到Innodb引擎?

这样做有什么潜在的障碍?

这是正确的方式来解决这个问题或其他各种更简单或更好的方法来恢复数据?

回答

0

当您首先添加外键时,您必须以特定顺序复制您的数据,否则您的数据将不会因为外键约束而被添加。 因此,最好的办法是检查(通过SQL查询)是否可以用当前数据集实现外键约束,然后复制数据,然后定义外键。 但是,如果您使用PHPMyAdmin从InnoDB数据库中导出数据,那么订单已经完成,您可以无任何问题地重新导入它。

2

这不会是一个简单的ALTER存储引擎的命令,因为我需要的外键添加到当前数据库架构

为什么不呢?当然先备份数据,这是一个好主意,但你并不需要转储和恢复数据,您也可以签发简单的ALTER TABLE,如:

ALTER TABLE `tablename` ENGINE = InnoDB; 

之后,你可以添加任何索引和外键。如果任何新外键失败,您必须修复您的数据并重试。

0

你也许可以添加外键后

  1. 改变表使用新的引擎

  2. 阿尔特每个表使用外键

我只看到一个与此问题,这将是如果外键被打破开始。