生成唯一标识符

3

我正在研究生成唯一ID的函数 - 我的具体要求是唯一的ID只需要8位数字。

无论如何,我刚刚意识到我们可以将ID自动递增字段设置为从任何数字开始。所以假设我让它从11111111开始 - 我是否正确地认为所有新记录都将从这个值递增?如果是这样,那么我就有了我的唯一8位数字ID,不需要使用函数来实现。

而且如果删除了一条记录,那么新记录会重复使用那个已删除的ID吗?

2个回答

6

没错。如果您的自动编号列从11111111开始,那么您的下一行将有编号11111112。

当记录被删除时,它的自动编号不会被重新使用。

编辑:关于最大值,这取决于您选择的列类型。来自MySQL文档:

为AUTO_INCREMENT列使用足够大的整数数据类型以容纳您需要的最大序列值。当该列达到数据类型的上限时,下一个生成序列号的尝试将失败。例如,如果您使用TINYINT,则最大允许的序列号为127。对于TINYINT UNSIGNED,最大值为255。

您可以使用INT并达到4294967295,或者使用BIGINT并达到18446744073709551615。请参见http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html


1
还要注意,当列达到99999999时,下一个插入将会出错,自增不会回绕并返回00000001。 - tloach
@tloach - 它不会直接跳到下一个值,即100000000吗? - MAX POWER
@tloach,你说得没错,它不会在最大值上绕回来,但是99999999并不是最大值。我已经添加了澄清,并附上了MySQL文档的参考。 - Brad
我认为他已经定义了该列仅容纳8位数字(INT(8))。 - tloach

4

1) 自增值不会被重复使用

2) 是的,通过将自增计数器设置为8位数字(例如10000000),您可以实现此目标!(表选项"AUTO_INCREMENT = N")


伙计,干杯。使用这种方法有什么问题吗?例如,ID值在前端被公开 - 这是一个问题吗? - MAX POWER
2
@GSTAR,你有什么疑虑?用户是否知道ID是一个问题,这取决于你对其进行的操作。我认为,如果用户知道ID并可以访问他们不应该访问的内容,那么你会面临更大的问题。请记住,这些ID是按顺序生成的。 - Brad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接