mysql - 将引擎类型从 MyISAM 更改为 InnoDB

标签 mysql phpmyadmin innodb myisam

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

  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 而不会丢失数据。

最佳答案

只需执行 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

关于mysql - 将引擎类型从 MyISAM 更改为 InnoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735083/

相关文章:

php - 将 php 表单中的多行插入数据库

python - SQL Alchemy 绑定(bind)列名作为参数

php - 如何从 MXML 应用程序中的数据库获取值?

mysql - 通过 phpmyadmin sql 查询修复 iframe 大小

mysql - 设置所有行的一列的值非常慢

mysql - 选择和删除

mysql - Laravel 从查询中检索列值给出错误

MySQL 从多行中选择

mysql - 如何修复 phpMyAdmin 中 "greatest per n group"查询的错误?

mysql - 如何在不对表进行任何更改的情况下更改表的引擎