1.5. MySQL存储引擎本节主要针对MySQL的存储引擎做一个大致的介绍。在这一节,我们不会太深入细节,因为我们将在整本书中来讨论存储引擎和它们各自的一些行为。但是......
当你将一个表的存储引擎从一种转换成另外一种时,任何针对原存储引擎的特性都会被丢弃。举个例子来说,如果你把一个InnoDB表转换成MyISAM,然后再转换回来,那么你将会发现InnoDB表上定义的所有外键约束都没有了。
1.5.19.2. 导出和导入
为了在整个转换过程中得到更大的控制权,你可以选择利用mysqldump工具先将表里的数据导出为文本文件。当你将表导出之后,你可简单地修改一下导出文件使得CREATE TABLE语句中的存储引擎变成你需要的。注意一定要将表名也修改了,因为同一个数据库里不可能有同名的表,即使它们是不同的类型。另外mysqldump默认会导出一个DROP TABLE命令,因此如果你不小心的话,你可能就会丢失数据。
你可以在第11章找到更多关于如何将数据有效地导出和加载的建议。
1.5.19.3. CREATE和SELECT
第三种方法是在前两种之间的一个融合,同时具有第一种的速度和第二种的安全性。与第二种导出整个表并且将它整个转换不同,第三种方案采用先建一张表,然后利用MySQL的INSERT…SELECT语法来填充它,如下所示:
如果你的数据不是很多的话,这个方案将会工作地很好;但是如果你有很多数据的话,比较有效的方法是增量式填充,将整个转换分成多个事务块来执行,这样子可以避免重做日志变得很大。假如id是主键,可以利用反复执行下面的命令来将表中的数据拷贝到新表中去(每次都增大x和y):
在这个过程完成之后,你将有拥有两张表,一个是原表,你可以在不再需要它时将它drop掉;另外一个是新表,它现在已经被完全的填充。如果需要防止数据的不一致拷贝将记得将原表锁定。
14/14 首页 上一页 12 13 14 |