MySQL 在其他列中输入的每个不同值自动递增?

MySQL auto-increment per distinct value entered in other column?

我想在我的 mysql 数据库中创建一个列,该列会自动递增以响应输入到另一列的特定值。

例如(下面的数据),当学生使用该网站创建新记录时,he/she 将输入他们 class 的姓名并分配一个数字变量(特定于class) 可以被老师用来识别学生。有什么方法可以做到这一点而无需为每个 class?

创建一个新的 table
class_name / student_number

classa / 1

classa / 2

classa / 3

classb / 1

classb / 2

classa / 4

classb / 3

MyISAM 有这样的功能; InnoDB 可能可以使用像

这样的子查询来模拟它
( SELECT MAX(student_number) + 1 FROM tbl WHERE class_name = ? )

您似乎在要求自动递增,以保持另一列中每个不同值的单独递增。

正如@RickJames 所回答的那样,MyISAM 存储引擎中存在此功能,但在 InnoDB 中不起作用。原因与 InnoDB 的行级锁定有关:为了防止与另一个并发客户端插入相同 'class' 的竞争条件(根据您的示例),InnoDB 必须在 all 给定 class.

的行

这不会影响 MyISAM,它无论如何都会进行 table 级锁定,但对于 InnoDB,它会在并发工作负载期间极大地损害吞吐量。

这不是使用 MyISAM 的好理由。

但是您应该放弃自动递增是某种序号或行号的想法——它不是。它只是一个 唯一的 值;没有别的意思。

如果您需要为每个 class 分配连续的学生 ID,请在您的应用程序中执行此操作并显式插入值。不要依赖自动增量机制来做到这一点。