可以直接将foreign的Innodb转换成mysiam吗?

发布于 2024-09-03 12:13:11 字数 81 浏览 6 评论 0原文

我想将带有innodb表的db转换为myisam,全部。我怎样才能做到这些?表之间存在一些外键。

我怎样才能以最好的方式做到这一点?

I want to convert the db with innodb tables into myisam, all of them. How can I do these? there are some foreign keys exist among tables.

how can I make this in the best way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅暮の光 2024-09-10 12:13:12

当外键仍然存在时,您无法直接从 InnoDB 转换为 MyISAM。你必须先消除限制。为此,请针对每个表执行以下步骤:

  1. 发出 SHOW CREATE TABLE tablename
  2. 对于输出中的每个 CONSTRAINT ... FOREIGN KEY 声明,您需要发出 ALTER TABLE tablename DROP FOREIGN KEY x,其中 x 是出现在 CONSTRAINTFOREIGN KEY 之间的标识符。
  3. 再次发出SHOW CREATE TABLE tablename。外键约束可能会留下索引(因为 InnoDB 需要每个外键都有一个索引,并且它不一定会因为删除了约束而删除它们)。对于您决定不再需要的每个索引,请发出 ALTER TABLE tablename DROP INDEX indexname 。

对涉及约束的所有表执行此操作后,您可以使用 ALTER TABLE tablename ENGINE=MYISAM 单独将表转换为 MyISAM。

You can't convert directly from InnoDB to MyISAM while the foreign keys are still there. You have to remove the constraints first. To do this, for each table follow these steps:

  1. Issue SHOW CREATE TABLE tablename
  2. For each CONSTRAINT ... FOREIGN KEY declaration in the output, you will need to issue ALTER TABLE tablename DROP FOREIGN KEY x where x is the identifier that appears between CONSTRAINT and FOREIGN KEY.
  3. Issue SHOW CREATE TABLE tablename again. The foreign key constraints may have left behind indexes (since InnoDB requires an index on each foreign key, and it won't necessarily remove them just because you have removed the constraint). For each index you decide you no longer want, issue ALTER TABLE tablename DROP INDEX indexname.

Once you have done this for all tables that are involved with constraints, you can convert tables to MyISAM individually using ALTER TABLE tablename ENGINE=MYISAM.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文