第一种方法:ALTER TABLE

将表从一个引擎修改为另一个引擎最简单的办法是使用ALTER TABLE语句,转换表的存储引擎会导致失去原引擎相关的所有特性。

例:将mytable的引擎修改为InnoDB

mysql> ALTER TABLE mytable ENGINE = InnoDB;

上述方法适用任何的存储引擎,但执行时间较长。MySQL会按行将数据从原表复制到一张新表中,在复制过程中会消耗系统所有的I/O能力,同时会对原表加上读锁。如果在繁忙的表上执行此操作需要特别小心。

第二种方法:导出和导入数据

使用mysqldump工具将数据导出到文件,然后修改文件中CREATE TABLE语句的存储引擎选项和表名,同时注意mysqldump默认会自动加上CREATE TABLE语句前加上DROPTABLE语句,若忽略此点可能会导致数据丢失。

第三种方法:创建与查询(CREATE 和 SELECT)

此方法综合了上述两种方法的高效和安全,不需要导出整个表,而是先创建一个新的存储引擎的表,然后利用 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。

假设有主键字段id,可重复运行以下语句将数据导入新表:

mysql > START TRANSACTION;

mysql > INSERT INTO innodb_table SELECT * FROM myisam_table

-> WHERE id BETWEEN x AND y;

mysql > COMMIT;

以上操作完成后,新表是原表的一个全量复制,原表不受任何影响。如果有必要,可以在执行中对原表加锁,确保新表与原表的数据一致。

persona Toolkit提供了一个pt-online-schema-change的工具,可以简单方便地执行上述的过程,避免手工操作可能导致的失误。

mysql改存储引擎教程_MySQL中修改数据表存储引擎的三种方法相关推荐

  1. mysql 中文字段报错_mysql 中 王数据表中插入中文字段报错:mysql insert into a values(202,王一); ERROR 1366 (HY000): Incorr...

    报错信息: mysql> insert into a values(202,"王一"); ERROR 1366 (HY000): Incorrect string value ...

  2. mysql删除重复的判断_MySQL中查询、删除重复记录一共有多少种方法?

    前言 本文主要给大家介绍了关于MySQL中查询.删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: select title,count(*) as coun ...

  3. mysql 修改表列名称_MYSQL数据库- 修改数据表名称、列名称

    目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...

  4. 计算机怎么删除表格,电脑中删除Excel2010表格多余图片的三种方法

    为了让表格看起来更加直观,很多朋友都会在Excel中插入图片.那么,当我们大批量插入图片时,如果想要删除的话,应该怎么办呢?以下是系统城小编为您带来的电脑中删除Excel2010表格多余图片的三种方法 ...

  5. Altium designer 在原理图及PCB中高亮某一条网络的三种方法

    1. alt 键+鼠标左键 2. 利用原理图界面右下角的"笔"一样的工具 3 .Navigator(在原理图界面右下角,Designe Compiler 选项中),选择如图所示的n ...

  6. linux下dd做优盘启动_Linux中制作U盘启动盘的三种方法,使用启动盘创建器/dd命令和Etcher...

    本文介绍在Linux系统中制作U盘启动盘的三种方法:使用启动盘创建器.dd命令和Etcher,以下以优麒麟Ubuntu Kylin 19.04为例,为你介绍这三种方法.如果要在Windows中制作U盘 ...

  7. mysql所有的编码_MySQL 批量修改数据表编码及字符集

    当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改.以下备注批量修改方案( 以修改为 utf8mb4_bin 为例,注意将 db_name 换为真实的数据库名 ). 1. ...

  8. C# 中Bitmap图像处理含增强对比度的三种方法

    Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetPix ...

  9. cad画直角命令_在cad中怎么画角度?cad画角度三种方法介绍

    cad是应用最广泛的计算机辅助设计软件,学会使用cad怎么画角度是必不可少的,尤其是对于新手来说,更应该学习.那么在cad中怎么画角度?下面小编就为大家介绍三种cad画角度方法,希望对大家有所帮助! ...

最新文章

  1. apache php wordpress,windows 安装 apache php wordpress
  2. 审车按月还是日期_新手都该知道的审车流程!
  3. vuecli3修改html,详解vue-cli3多页应用改造
  4. PHP中不用第三个变量交换两个变量的值
  5. 比亚迪后续车都会搭在鸿蒙系统吗_华为鸿蒙系统上车,比亚迪汉发布!我告诉你华为鸿蒙到底是什么...
  6. ZAB(Zookeeper Atomic Broadcast)协议详解
  7. fork()的流程图
  8. 成为java gc专家_成为JavaGC专家上(2)—如何监控Java垃圾回收机制
  9. C语言丨小 学 数 学(一):高精度加法
  10. 一个导出类的内部函数的dll
  11. ES启动错误 ERROR: the system property [es.path.conf] must be set
  12. linux中找不到vim命令
  13. Python与R语言优缺点比较——“术业有专攻”
  14. 神经网络模型的基本原理,神经元网络算法的思想
  15. vue + web 前端访问后端,跨域问题解决方案
  16. [1.24] T3-人品问题
  17. zuk android os 流量,国产机首发? ZUK Z1或12月推送安卓6.0
  18. 利用QQ昵称作为软件版本号
  19. RobotStudio如何配置自定的义第七轴
  20. javaweb项目相对路径与绝对路径

热门文章

  1. Ntop性能提升方案
  2. vim tab设置为4个空格
  3. DbgPrint 函数流程分析
  4. Win32汇编数据对齐相关的伪指令(ALIGN、EVEN、ORG)
  5. Linux内核探讨-- 第四章
  6. UNIX系统编程(2)
  7. socket sock inet_sock 等关系
  8. 计算机地质应用软件,中国地质大学《质软件应用》作业报告.doc
  9. CMake命令之list
  10. 问题集锦(1-10)