我想在我的mysql数据库中创建一个列,该列自动递增以响应输入到另一列的特定值。
例如(下面的数据),当学生使用该网站创建新记录时,他/她将输入他们的类的名称并被分配一个数字变量(特定于该类),可以由识别学生的老师。如果不为每个类创建一个新表,我有什么方法可以做到这一点吗?
class_name / student_number
classa / 1
classa / 2
classa / 3
classb / 1
classb / 2
classa / 4
classb / 3
答案 0 :(得分:2)
MyISAM有这样的功能; InnoDB可能使用像
这样的子查询来模拟它( SELECT MAX(student_number) + 1 FROM tbl WHERE class_name = ? )
答案 1 :(得分:1)
似乎你要求自动增量在另一列中为每个不同的值维持一个单独的增量。
正如@RickJames所说,MyISAM存储引擎中存在此功能,但它在InnoDB中不起作用。原因与InnoDB的行级锁定有关:为了防止竞争条件与另一个并发客户端插入相同的“类”(根据您的示例),InnoDB必须在所有>上创建间隙锁定em>给定类的行。
这不会影响MyISAM,它无论如何都会进行表级锁定,但对于InnoDB而言,它会严重影响并发工作负载期间的吞吐量。
这不是使用MyISAM的好理由。
但你应该放弃自动增量是某种序数或行数的想法 - 事实并非如此。它只是一个唯一的值;它没有其他意义。
如果您需要为每个班级分配连续的学生ID,请在您的申请中进行,并明确插入值。不要依赖自动增量机制来做到这一点。