mysql - 如何为 MySQL 中的每个新人分配重新启动的自动递增 ID?

标签 mysql auto-increment

如果我有这样一张表:

PersonId   
Joe         
Joe
Joe
Joe
Frank
Frank
Frank
Frank

想要让它看起来像这样:

PersonId   id
Joe        1     
Joe        2
Joe        3
Joe        4
Frank      1
Frank      2
Frank      3
Frank      4

我该怎么做?类似于 alter table add id int auto_increment, add primary key (id) 但是有更多的参数使自动增量在每个新名称后重置并且没有主键因为会有重复的值。

最佳答案

试试这个在飞行中做:

select personid, 
       (@rn := if(@p = personid, @rn + 1,
                  if(@p := personid, 1, 1)
                 )
       ) as id
from your_table cross join
     (select @rn := 0, @p := 0) vars
order by personId;

这在两个具体方面与 Juergen 的回答不同。首先,有一个明确的order by,因为您不能依赖没有order byselect 的排序。其次,使用的两个变量都在一个语句中赋值。 MySQL 不保证 select 中语句的计算顺序,因此唯一安全的方法是使用单个语句。

关于mysql - 如何为 MySQL 中的每个新人分配重新启动的自动递增 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27573844/

相关文章:

php - 最常用的标签 - mysql

mysql - 为什么索引不适用于非唯一的日期时间列?

mysql - 如何在 MySQL 中重置 AUTO_INCRMENT

MySQL-插入一条主键为空的记录,在一台服务器上工作,而不是另一台服务器

c++ - 使用 "Curiously Recurring Template Pattern"的增量数

mysql - 上一个画廊的照片

PHP MySQL 在非对象上调用成员函数 execute()

android - SQLite 与远程数据库?

mysql - 如何创建可以通过导出和导入维护的唯一键

MySQL - 自动增量不重置