MySQL自增自定义值

4
我正在尝试在mysql数据库中创建一列,使其自动递增1,但从0到Z然后循环。
例如:000、001、002、...、009、00A、00B、...、00Z、010、...、0ZZ、...、100。
我希望数据库通过自动递增字段来创建该列。
我的想法是:
1. 创建每个字符的列,从0到36,然后自动递增第N行(其中N是最低有效位数)。然后在每个列上添加触发器,当列N达到36时,将1添加到列N-1。 2. 创建一个包含36行的表,每行包含一个字符0-Z,并使用与上述类似的进位逻辑从表中提取相应的字符。 3. 创建存储过程来执行项目1的适当逻辑。 4. 让实际程序生成一个值并将其插入表中。 5. 有一个常规的自动递增值,并计算序列中的下一个值(这是最不理想的,因为它使得难以通过仅查看数据库来解析)。
我希望有一种优雅的方法可以实现此功能,例如内置机制,但我不知道。我对存储过程/触发器一无所知,因此需要帮助。我认为最简单的方法是为字符设置查找表,并在达到第36行时将其重置为0,然后进行到第N-1行的进位。

1
你也打算将这列作为你的主键吗? - Stephen
我想这样做,但这并非绝对必要。 - Ryan P
好的,那么你能解释一下字母数字ID背后的原因吗?为什么一个带有auto_increment的常规整数字段不足以满足要求? - Stephen
它是由接收最终数据产品的人使用的标识符。 - Ryan P
1个回答

3
根据您的评论,我的建议是执行以下操作:
使用常规整数auto_increment列作为行的主键,然后有一个类型为varchar或*text类型之一(取决于您的mysql服务器版本和数据存储要求)的列来存储客户使用的“标识符”。
可以使用触发器自动生成标识符。
如果您将基于标识符进行查找(即,用户输入标识符以“跳转”到记录),则需要在该列上创建索引。

1
你试过这个吗?自增值直到BEFORE触发器运行后才生成,而在AFTER触发器中修改任何列已经太晚了。 - Bill Karwin
你可以在 AFTER 触发器中修改列 - UPDATE foo set bar='bas' where id=NEW.id - Stephen
1
ERROR 1442 (HY000): Can't update table 'foo' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. - Bill Karwin
当然,您可以修改其他表中的列,但不能修改触发器所触发的表。 - Bill Karwin
哦,我需要找到我实现类似功能的地方,以便提醒我具体是如何实现的。 - Stephen

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