将引擎类型从MyISAM更改为InnoDB

时间:2019-06-24 10:55:27

标签: mysql phpmyadmin innodb myisam

我想将引擎类型从MyISAM更改为InnoDB。 我做了什么: 方法1:

  1. 在新数据库中复制表结构。
  2. 将表引擎从MyISAM更改为InnoDB。
  3. 从现有表(MyISAM)中导出数据。
  4. 将数据导入新表(InnoDB)。 enter image description here enter image description here enter image description here

在这里,我可以看到一个表的总行数和该表的大小。但在浏览器上看不到任何记录。

方法2:

  1. 在新数据库中复制表结构。

  2. 从现有数据库中导出数据。

  3. 将数据导入新数据库中。
  4. 将表引擎从MyISAM更改为InnoDB。 enter image description here enter image description here

在这里,我注意到在更改引擎类型之后,许多记录被删除。 在客户表中,输入更改引擎类型后的记录为310749,我看到的只有243898,丢失的总记录为66851。

这有什么问题? 将数据类型从MyISAM更改为InnoDB的任何其他方法,都不会丢失数据。

1 个答案:

答案 0 :(得分:2)

只需执行ALTER TABLE foo ENGINE=InnoDB;,但这可以“就地”完成。如果要将新表放在其他数据库中:

CREATE TABLE db2.foo LIKE db1.foo;
ALTER TABLE  db2.foo ENGINE=InnoDB;  -- and possibly other changes, see blog below
INSERT INTO  db2.foo
    SELECT * FROM db1.foo;       -- copy data over

SELECT COUNT(*) FROM db1.foo;
SELECT COUNT(*) FROM db2.foo;    -- compare exact number of rows

行数-如果使用SHOW TABLE STATUS来查看行数,请注意MyISAM提供了确切的行数,但是InnoDB仅近似于该数。使用SELECT COUNT(*) FROM foo来获取确切的行数。

在这里,让我把从MyISAM迁移到InnoDB的旧博客删除蜘蛛网:http://mysql.rjweb.org/doc.php/myisam2innodb