【问题标题】:MySQL auto-increment per distinct value entered in other column? [closed]在其他列中输入的每个不同值的MySQL自动增量? [关闭]
【发布时间】:2021-04-22 05:09:12
【问题描述】:

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

例如(以下数据),当学生使用该网站创建新记录时,他/她将输入他们的班级名称并分配一个数字变量(特定于该班级),供以下人员使用老师来识别学生。有什么方法可以在不为每个类创建新表的情况下做到这一点?

class_name / student_number

classa / 1

classa / 2

classa / 3

classb / 1

classb / 2

classa / 4

classb / 3

【问题讨论】:

  • 我建议存储课程的注册日期时间,然后通过选择即时生成数字。
  • 我不太明白你在追求什么,但显然其他人也明白。

标签: mysql auto-increment


【解决方案1】:

MyISAM 有这样的功能; InnoDB 可能可以使用类似的子查询来模拟它

( SELECT MAX(student_number) + 1 FROM tbl WHERE class_name = ? )

【讨论】:

    【解决方案2】:

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

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

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

    这不是使用 MyISAM 的好理由。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-11
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      相关资源
      最近更新 更多