Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不再支持复合密钥上的MySQL自动增量?_Mysql_Sql - Fatal编程技术网

不再支持复合密钥上的MySQL自动增量?

不再支持复合密钥上的MySQL自动增量?,mysql,sql,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 等等。因此,如

我有一台运行旧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.17中创建相同的表时,我得到一个错误:

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

我用的是MyISAM引擎


我该怎么做

据我所知,以下是您需要执行的命令:-

create table mytest33(topicnum mediumint, postnum mediumint auto_increment,index(postnum), primary key (topicnum,postnum));
您可以从这里获得更多信息:-

希望能有帮助。
祝你有愉快的一天

MyISAM引擎将此作为一项功能,并且它仍然受支持
InnoDB
从未具有此功能。您切换到InnoDB(这是一件好事),但被少数几个“缺陷”之一所困扰


前面答案中的链接指出,
INDEX(id)
允许您拥有
postnum
be
AUTO\u INCREMENT
UNIQUE
(除非您明确设置)。但是,它不会在1点重新开始。这更为复杂

这似乎解决了问题:

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

创建表mytest33(topicnum mediumint、postnum mediumint、主键(topicnum、postnum));试试这个,效果很好。您的原始版本是否有保持订单的触发器?我不知道MySQL曾经直接支持过这个功能。salil:当然可以,但它不包括自动增量。Gordon-没有设置触发器或任何其他设置,没有。我发布的查询最初在MySQL的旧版本(如5.5.41)中运行得很好。谢谢,该查询工作正常。但这并不能解决我的问题:postnum的值不跟随topicnum。无论topicnum是什么,每次插入新行时,它都会递增一。理想情况下,如果使用topicnum 1插入两行,使用topicnum 2插入两行,则对于使用topicnum 1的行,postnum的值应为1和2,对于使用topicnum 2的行,postnum的值应为1和2。这就是它在MySQL旧版本中的工作方式。你是对的-如果我明确声明它是一个MyISAM表,它似乎可以按预期工作: