我正在使用 mysql 和 PHP。我有一张这样的学生桌。我正在使用 InnoDB 引擎。
id int AUTO_INCREMENT
regno int
name varchar
每当插入新学生时,我想分配下一个可用的 regno。例如,前一个学生的 regno 是 1,那么下一个条目的值应该是 2。自动增量在这里不起作用,因为它可能会产生间隙。(我正在使用事务,因此在向学生表插入一行后,可能会导致回滚的查询很少,在这种情况下,虽然没有插入实际记录,但自动增量 id 会增加)。另外,我不在乎旧 regno 之间是否存在间隙……例如 regno 可能依次具有 1、2、3、5、10、11、12。现在当插入下一个学生时,我希望这个学生 12+1=13。另外,我想确保 regno 不重复。(虽然 regno 有一个 UNIQUE 索引,但我不想抛出错误。它应该得到下一个数字)。
我有两个解决方案。1:(伪代码)查询数据库的 newregno = max(regno)+1 b。在插入行时将 newregno 分配给学生。
在这种情况下,我只是担心 2 个应用程序实例可能同时查询数据库并获得相同的 newregno 导致重复。
2:使用触发器...在实际插入行后更新 regno。(我对触发器的了解不多,但如果有人建议这是一种更好的方法,我会选择它)
有什么建议吗?
编辑--- regno(注册号)将来可能不是唯一的,但与其他一些列(例如课程/会话)一起是唯一的。所以请不要为我提供“自动增量”索引类型的解决方案。