mysql自动在非主键上递增

问题描述

| 今天另一个问题:) 这次,我想知道是否/如何使每个主键的第二列自动增加:
CREATE TABLE test (
    `id` INTEGER UNSIGNED NOT NULL,`subId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,`text` VARCHAR(45) NOT NULL,PRIMARY KEY (`id`,`subId`)
)
ENGINE = InnoDB;
不幸的是,只有当我将
ID
指定为主键并将
subId
指定为索引键时,此创建才起作用(但是我需要同时使用它们,and1ѭ可以重复...) 示例数据(我需要什么):
1,1
1,2
1,3
2,1
2,2
3,1
ID
用作主索引和
subId
索引的问题在于
subId
的递增独立于
ID
。 如何做到这一点,甚至有可能吗?     

解决方法

我不得不处理一个类似的问题,即不自然地排序类别树。 如果您一次插入一个ID的所有行,则可以对每个subId执行以下操作:
SET @seq = 0;
INSERT INTO test
  (id,subId,text) VALUES
  (_id,@seq := @seq + 1,\'Some text\')
;
如果您需要在ID上“添加”一行,则可以使用以下命令设置@seq
SELECT IFNULL(MAX(subId),0) INTO @seq FROM test WHERE id = _id;
当然,这将需要由应用程序而不是mySQL管理id。 您可以执行与最后一个代码块相同的操作,以获取下一个可用的ID。     ,它可能不完全是您想要的,并且仅适用于MyISAM和BDB表,但是我认为最接近您要求的是分组的主键。 从手册中:
CREATE TABLE animals (
    grp ENUM(\'fish\',\'mammal\',\'bird\') NOT NULL,id MEDIUMINT NOT NULL AUTO_INCREMENT,name CHAR(30) NOT NULL,PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    (\'mammal\',\'dog\'),(\'mammal\',\'cat\'),(\'bird\',\'penguin\'),(\'fish\',\'lax\'),\'whale\'),\'ostrich\');

SELECT * FROM animals ORDER BY grp,id;
Which returns: 
+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...