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