【问题标题】: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

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

【问题讨论】:

    标签: mysql auto-increment


    【解决方案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);

      【讨论】:

        猜你喜欢
        • 2015-06-26
        • 1970-01-01
        • 2011-01-25
        • 2016-03-07
        • 2014-02-22
        • 1970-01-01
        • 2021-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多