我在尝试在 MySQL 5.6 中将表从 MyISAM 转换为 InnoDB 时遇到问题。
以下是表转储:
--
-- Table structure for table `companies`
--
DROP TABLE IF EXISTS `companies`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `companies` (
`uid` int(20) NOT NULL,
`cid` int(20) NOT NULL AUTO_INCREMENT,
`cname` varchar(500) NOT NULL,
`rfc` varchar(20) NOT NULL,
`address` varchar(1000) NOT NULL,
`dbUseExternal` tinyint(1) NOT NULL DEFAULT '0',
`dbHost` varchar(50) NOT NULL,
`dbPort` varchar(50) NOT NULL,
`dbUser` varchar(50) NOT NULL,
`dbPass` varchar(50) NOT NULL,
`dbSSL` varchar(50) NOT NULL,
`dbDriver` varchar(50) NOT NULL,
`dbName` varchar(50) NOT NULL,
`status` int(10) NOT NULL,
PRIMARY KEY (`uid`,`cid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
它作为 MyISAM 工作。但是,如果我尝试将其转换为 InnoDB(或者如果我尝试编辑此转储以将其作为 SQL 文件插入命令行),则会收到以下错误:
表定义不正确;只能有一个自动列,并且必须将其定义为键
我理解这个错误——或者至少我认为我理解了。我并没有真正使用超过一AUTO_INCREMENT
列,它被定义为主键。
此外,我发现的有关错误的信息始终是因为明显缺少键或重复的 AUTO_INCREMENT 定义。我看到普遍评论的另一件事是 MyISAM 和 InnoDB 也是如此。
那么,为什么它适用于 MyISAM 而不适用于 InnoDB?