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,请在您的应用程序中执行此操作并显式插入值。不要依赖自动增量机制来做到这一点。
我想在我的 mysql 数据库中创建一个列,该列会自动递增以响应输入到另一列的特定值。
例如(下面的数据),当学生使用该网站创建新记录时,he/she 将输入他们 class 的姓名并分配一个数字变量(特定于class) 可以被老师用来识别学生。有什么方法可以做到这一点而无需为每个 class?
创建一个新的 tableclass_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,请在您的应用程序中执行此操作并显式插入值。不要依赖自动增量机制来做到这一点。