不再支持复合密钥上的MySQL自动增量?
我有一台运行旧MySQL版本(5.5.41)的服务器,该版本支持以下内容:不再支持复合密钥上的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 等等。因此,如
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
beAUTO\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表,它似乎可以按预期工作: