MySQL 转换/修改表存储引擎 详细介绍

MySQL表转换(转换/修改表存储引擎):

有几种方法可以吧表从一种引擎转移到另外一种引擎上,都有自己的优缺点。下面介绍3种常用的方法。

一:ALTER TABLE

把表从一种引擎转移到另外一种引擎最简单快捷的方法用ALTER TABLE语句:

mysql>ALTER TABLE mytablename ENGINE = 引擎类型

详细介绍该用法:这种语法适合所有的存储引擎,不过这里有一个“陷阱”:这种转换过程会消耗大量时间。MySQL为此要执行一个旧表到新表的逐行复制(Row-By-Row Copy)。在这期间,转换操作可能会占用服务器得所有I/O处理能力,并且在转换时,源表要被加读锁。因此,在一个繁忙的表上做此操作,要加以注意。作为替代手断,可以使用下面这个方法,它会先做个表拷贝。

如果从一个引擎到另一种引擎做表转换,所有属于原始引擎的专用特性都会丢失,例如,如果将一个innoDB表转换成MyISAM表,在转回来,那么最初定义在原InnoDB表上的所有外键都会丢失。

二:转储(Dump) 和导入(Import)

如果想对表转换的过程做更多控制,可以选择使用mysqldump工具,将表先转储(dump)成一个文本文件,在编辑转储文件(dump file),修改其中的CREATE TABLE语句。一定要注意修改表名和引擎类型,因为即便引擎类型有所不同,统一数据库种也不允许存在同一表名的两张表。另外,mysqldump在CREATE TABLE语句前,会默认地加上drop table 命令,如果不注意,可能因此丢失原有数据。

三:CREATE 和 SELECT

这种方法转换,在第一种方法的速度与第二种方法的安全性之间做了一个平衡。它不是转储整张表,或者一次性转换所有的数据,而是创建一个新表,使用MySQL的INSERT...SELECT语法来转移数据。如下:

mysql>CREATE TABLE innodb_table LIKE myisam_table;

mysql>ALTER TABLE innodb_table ENGINE=innoDB;

mysql>INSERT INTO innodb_table SELECT * FROM myisam_table;

如果数据数据量大,这种办法效果不错。但是更高效的办法是增量地填充表,在填充每个增量数据块的时候都提交事务,这样就不会导致撤销日志(Undo Log)变得过于庞大。假定id是主键,可以重复运行下列查询(每次逐次增大x和y的值),直至所有的数据都复制到新表。

mysql>START TRANSACTION;

mysql>INSERT INTO innodb_table SELECT * FROM myisam_table WHERE id BETWEEN x AND y;

mysql>COMMIT;

转移操作完成后,源表仍会保留,可以在操作完成后删除(drop)它,而此时,新表已经被填充完毕。注意:如有必要,请在转换时加锁源表,防止转移复制数据不一致的问题

时间: 2024-08-26 19:35:12

MySQL 转换/修改表存储引擎 详细介绍的相关文章

MySQL存储过程修改表存储引擎为InnoDB

第一次写存储过程,写得好憋屈. set @c_db := (select database()); drop procedure if exists alter_tables_engine; delimiter // create procedure alter_tables_engine() begin declare db varchar(64); declare done boolean default 0; declare t varchar(64); declare table_nam

MySQL中merge表存储引擎用法

在Mysql数据库中,Merge表有点类似于视图.mysql的merge引擎类型允许你把许多结构相同的表合并为一个表.之后,你可以执行查询,从多个表返回的结果就像从一个表返回的结果一样.每一个合并的表必须有完全相同表的定义和结构. Mysql Merge表的优点:A. 分离静态的和动态的数据B. 利用结构接近的的数据来优化查询C. 查询时可以访问更少的数据D. 更容易维护大数据集E. 可以通过修改.mrg文件来修改Merge表,当然也可以用alter进行修改,修改后要通过FLUSH TABLES

查看和修改MySQL数据库表存储引擎

要做一名合格的程序员,除了把代码写的漂亮外,熟知数据库方面的知识也是不可或缺的,下面总结一下如何查看和修改MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎:show engines;        2.查看某个数据库中某个表所使用的存储引擎:show table status from db_name where name='table_name';        3.修改表引擎方法:alter table table_name engine=innodb;     

MySQL中四种常用存储引擎的介绍

MySQL常用的四种引擎的介绍 (1):MyISAM存储引擎: 不支持事务.也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表 支持3种不同的存储格式,分别是:静态表:动态表:压缩表 静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复:缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把

查看和改动MySQL数据库表存储引擎

要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎:show engines;        2.查看某个数据库中某个表所使用的存储引擎:show table status from db_name where name='table_name';(注:将where条件去掉后能够查看某个数据库中全部表的存储引擎情况)        3.改动表引擎方法:alter t

INNODB与MyISAM两种表存储引擎区别

mysql数据库分类为INNODB为MyISAM两种表存储引擎了,两种各有优化在不同类型网站可能选择不同,下面小编为各位介绍mysql更改表引擎INNODB为MyISAM技巧. 常见的mysql表引擎有INNODB和MyISAM,主要的区别是INNODB适合频繁写数据库操作,MyISAM适合读取数据库的情况多一点,如何把表引擎INNODB更改为MyISAM呢? 使用以下mysql sql语句,可以给表设定数据库引擎: ALTER TABLE `wp_posts` ENGINE = MyISAM;

Mysql技术内幕——InnoDB存储引擎

一.mysql体系结构和存储引擎 1.1.数据库和实例的区别 数据库:物理操作系统或其他形式文件类型的集合.在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件. 数据库实例:由数据库后台进程/线程以及一个共享内存区组成.数据库实例才是真正用来操作数据库文件的. mysql数据库是单进程多线程的程序,与sql server比较类似.也就是说,Mysql数据库实例在系统上的表现就是一个进程. 1.2.mysql的体系结构 mysql由连接池组件.管理服务和工具组件.sql接口组建

MySQL内核:InnoDB存储引擎 卷1

MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) 姜承尧 蒋鸿翔 饶珑辉 温正湖 著   ISBN 978-7-121-22908-4 2014年5月出版 定价:69.00元 360页 16开 编辑推荐 预售前100位读者送MySQL 5.6 InnoDB存储引擎的架构图 l  <高性能MySQL>配套深度阅读数据库内核解析篇 l  网易资深数据

[转帖]一文看懂mysql数据库本质及存储引擎innodb+myisam

一文看懂mysql数据库本质及存储引擎innodb+myisam https://www.toutiao.com/i6740201316745740807/ 原创 波波说运维 2019-09-29 00:01:00 概述 今天主要讲下mysql数据库引擎的一些概念和mysql数据库本质,一句话总结: 文件夹-文件:一个数据库其实就是一个的文件夹,数据库里面的表就是文件夹里的一个或者多个文件(根据数据库引擎不同而不同,MyISAM是3个,InnoDB是2.5个) mysql的数据库其实就是存放在M