MySQL 自动递增自定义值

Posted

技术标签:

【中文标题】MySQL 自动递增自定义值【英文标题】:MySQL Auto Increment Custom Values 【发布时间】:2011-07-10 20:21:29 【问题描述】:

我正在尝试在 mysql 数据库中创建一个自动递增一但从 0-Z 开始然后滚动的列。

例如 000, 001, 002, ..., 009, 00A, 00B, ..., 00Z, 010, ..., 0ZZ, ..., 100.

我想让数据库通过自动递增字段创建列。

我的想法是:

    为从 0 到 36 的每个字符创建一列,然后将第 N 行(其中 N 是最低有效位)自动增加 1。然后在每列上添加一个触发器,以在列 N-1 列添加 1 N 达到 36。 创建一个包含 36 行的表,其中每行包含一个字符 0-Z,并使用与上述类似的进位逻辑从表中提取适当的字符 创建一个存储过程来执行第 1 项中的相应逻辑 让实际程序生成一个值并将其插入到表中 有一个常规的自动递增值并计算序列中的下一个值(这是最不理想的,因为它很难被仅查看数据库的人解析)

我希望有一些优雅的东西可以像内置机制一样允许这样做,我只是不知道。我对存储过程/触发器一无所知,因此将不胜感激。我认为最简单的方法是为字符创建一个查找表,当到达第 36 行时,它被重置为 0,然后有一个进位到第 N-1 行。

【问题讨论】:

您是否也打算将此列用作您的主键? 我愿意,但这不是绝对必要的 好的,那么您能解释一下字母数字 ID 背后的原因 - 为什么带有 auto_incremenet 的常规整数字段不够用? 是接收最终数据产品的人使用的标识符 【参考方案1】:

根据您的 cmets,我的建议是执行以下操作:

使用常规整数 auto_increment 列作为行的主键,然后使用 varchar 类型的列或 *text 类型之一(取决于您的 mysql 服务器版本和数据存储要求)来存储您的“标识符”客户使用的。

标识符可以使用触发器自动生成。

如果您要根据标识符进行查找(即,也许用户输入标识符以“跳转到”记录),您将需要该列的索引。

【讨论】:

你试过了吗?直到BEFORE 触发器运行后才会生成自动增量值,并且修改AFTER 触发器中的任何列都为时已晚。 您当然可以修改 AFTER 触发器中的列 - UPDATE foo set bar='bas' where id=NEW.id 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. 您当然可以修改其他表中的列,但不能修改触发触发器的表。 嗯。我需要找到我在哪里实现了类似的东西,以提醒我实际上是如何做到的。

以上是关于MySQL 自动递增自定义值的主要内容,如果未能解决你的问题,请参考以下文章

按元框值自定义帖子类型查询

如何根据预先确定的约束值自定义热图颜色?

ASP+ACCESS里怎样按某条字段值自定义排序?

Combobox值自定义(不通过数据库)

Android Studio基础项目-两个Activity的Intent传值自定义类数据(如数据库数据读取)。

Android Studio基础项目-两个Activity的Intent传值自定义类数据(如数据库数据读取)。