不再支持复合键上的MySQL auto_increment?

时间:2015-04-05 10:57:31

标签: mysql sql

我有一台运行旧MySQL版本(5.5.41)的服务器,其中支持以下内容:

create table mytest33
(
    topicnum mediumint, 
    postnum mediumint auto_increment, 
    primary key (topicnum,postnum)
);

因此,当我在此表中插入值时,它将如下所示:

Topicnum  Postnum
1         1
1         2
2         1

等等。因此,如果topicnum不同,postnum值将返回到1。

不再支持 - 当我尝试在MySQL 5.6.7版中创建相同的表时,我收到错误:

  

错误1075(42000):表定义不正确;只能有一个自动列,必须将其定义为键。

我正在使用MyISAM引擎。

我如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

根据我能理解的,这是你需要执行的命令: -

create table mytest33(topicnum mediumint, postnum mediumint auto_increment,index(postnum), primary key (topicnum,postnum));

您可以从这里获得更多信息: - Mysql Innodb: Autoincrement non-Primary Key

希望它有所帮助。 祝你有个美好的一天!

答案 1 :(得分:0)

MyISAM引擎将其作为一项功能,并且仍受支持。 InnoDB从未有过此功能。你切换到InnoDB(这是一件好事),但被少数'缺陷之一所困扰。

上一个答案中的链接指出INDEX(id)可让postnum成为AUTO_INCREMENTUNIQUE(除非您明确设置)。然而,它不会从1开始。这更复杂; see my blog

答案 2 :(得分:0)

所以这似乎解决了这个问题:

create table mytest33(
    topicnum mediumint,
    postnum mediumint auto_increment, 
    primary key (topicnum,postnum)
) ENGINE=MyISAM;