php mysql将下一个序列号分配给该行

时间:2013-03-11 08:33:53

标签: php mysql innodb

我在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(注册号码)将来可能不是唯一的,但与其他一些列一样是唯一的。当然/会话。所以请不要给我一个“自动增量”索引类型的解决方案。

1 个答案:

答案 0 :(得分:0)

看看这个: http://www.mysqlperformanceblog.com/2011/11/29/avoiding-auto-increment-holes-on-innodb-with-insert-ignore/

增量使用不同的算法来计算id。您需要将其设置为避免漏洞。