将 MyISAM 转换为 InnoDB,其中表具有两列(复合)PK,其中之一是自动增量

Posted

技术标签:

【中文标题】将 MyISAM 转换为 InnoDB,其中表具有两列(复合)PK,其中之一是自动增量【英文标题】:Convert MyISAM to InnoDB where tables have two-column (composite) PK and one of those is auto-increment 【发布时间】:2011-06-30 23:05:36 【问题描述】:

我想将我们的一些 MyISAM 表转换为 InnoDB,以便我可以利用外键支持。但是,大多数表使用两列(复合)主键设计,其中一个列是自增列(这是出于历史原因这样做,同时也确保自增列可以充当一种其他列值上下文中记录的增量键)

我意识到我们需要取消多列主键才能使用自动增量和 InnoDB。我们有数千条记录,这些记录与其他表有关系。

有没有关于如何将这些表转换为 InnoDB 的提示?我想出的唯一方法是首先在每个表中添加一个新列,将其设置为唯一的自动增量主键,然后使用脚本更新依赖表以指向新的(真正唯一的)主键.

谢谢 史蒂夫

【问题讨论】:

【参考方案1】:

mysql 5.0 及更高版本中,您可以将自动增量列作为主键的一部分,但它必须是索引中的第一个字段。

*...一个 AUTO_INCREMENT 列必须作为 InnoDB 表索引中的第一列出现...*

在此处查看文档条目http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html

【讨论】:

以上是关于将 MyISAM 转换为 InnoDB,其中表具有两列(复合)PK,其中之一是自动增量的主要内容,如果未能解决你的问题,请参考以下文章

MySql - 将 InnoDB 转换为数据库的 MyISAM 存储引擎

Mysql MyISAM数据库批量转换表引擎为Innodb

如何将 MAIN mysql 数据库从 MyIsam 转换为 InnoDB

InnoDB 表被制作为 MyISAM

MySQL表类型MyISAM/InnoDB的区别(解决事务不回滚的问题)(转)

MySQL系统数据库表可以转换成InnoDB吗?