首页 > 数据库

1.5. MySQL存储引擎

时间:2009-05-01 22:34:39  作者:HopingWhite  我要投稿
Linux初探欢迎您的投稿,投放方法请点击这里查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
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语法来填充它,如下所示:

image

如果你的数据不是很多的话,这个方案将会工作地很好;但是如果你有很多数据的话,比较有效的方法是增量式填充,将整个转换分成多个事务块来执行,这样子可以避免重做日志变得很大。假如id是主键,可以利用反复执行下面的命令来将表中的数据拷贝到新表中去(每次都增大x和y):

在这个过程完成之后,你将有拥有两张表,一个是原表,你可以在不再需要它时将它drop掉;另外一个是新表,它现在已经被完全的填充。如果需要防止数据的不一致拷贝将记得将原表锁定。

如果您需转载 1.5. MySQL存储引擎,请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目热门