按组自动递增

Posted

技术标签:

【中文标题】按组自动递增【英文标题】:auto_increment by group 【发布时间】:2010-10-15 05:17:52 【问题描述】:

mysql(特别是 5.0)有没有办法让 auto_increment 字段的值基于分组列?

例子:

id  name   group_field
1   test   1
2   test2  1
1   test3  2
2   test4  2
1   test5  3
2   test6  3

我不想通过任何“疯狂”的方法来实现这一点,但如果有必要的话。

【问题讨论】:

【参考方案1】:

对于 MyISAM 和 BDB 表,您可以将 auto_increment 字段作为键的次要部分,例如

CREATE TABLE foo (
   id          INT AUTO_INCREMENT NOT NULL,
   group_field INT NOT NULL,
   name        VARCHAR(128),

   PRIMARY KEY(group_field, id)
);

manual 对此是这么说的

在这种情况下,生成的值为 AUTO_INCREMENT 列是 计算为 MAX(auto_increment_column) + 1 哪里 前缀=给定前缀。这很有用 当您想将数据排序时 组。

【讨论】:

由于手册只提到了 MyISAM 和 BDB,我猜不会。另见dev.mysql.com/doc/refman/5.0/en/… AUTO_INCREMENT 必须在主键上 - 如果您尝试创建一个在键外使用它的表,您将收到错误 1075“表定义不正确;只能有一个自动列并且它必须被定义为一个键” 这对于多个并发插入是否安全? 是的,看看dev.mysql.com/doc/refman/8.0/en/… 了解更多关于 InnoDB 处理 auto_increment 的深度【参考方案2】:

你有没有想过composite primary keys?

【讨论】:

【参考方案3】:

您可以通过插入触发器来实现这一点,通过 group_field 的 group_fileld = @inserted_group 从表组设置 max(id);

【讨论】:

以上是关于按组自动递增的主要内容,如果未能解决你的问题,请参考以下文章

R语言按组聚合求和实战(sum a variable by group):使用aggregate函数按组聚合求和使用tapply函数按组聚合求和按组聚合求和(使用dplyr包)

Python-按组分开的数据框

zbrush怎么按组进行快速遮罩?

按组迭代回归 ML 模型

按组滚动/移动平均

按组回归[重复]