MySQL自动递增自定义值

时间:2011-03-08 04:38:31

标签: mysql database database-design indexing auto-increment

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

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

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

我的想法是:

  1. 为每个字符创建一个从0-36开始的列,然后自动递增第N行(其中N是最低有效数字)乘以1.然后在每列上添加一个触发器,在列N-1列中添加1 N达到36。
  2. 创建一个包含36行的表,其中每行包含一个字符0-Z,并使用上述类似的进位逻辑从表中提取相应的字符
  3. 创建存储过程以执行第1项中的相应逻辑
  4. 让实际程序生成一个值并将其插入表
  5. 有一个常规的自动递增值并计算序列中的下一个值(这是最不理想的,因为它使得只是查看数据库的人很难解析)。
  6. 我希望有一些优雅的东西可以让它像内置的机制一样,我只是不知道。我对存储过程/触发器一无所知,因此非常感谢您的帮助。我认为最简单的方法是为字符设置一个查找表,当到达第36行时,它会重置为0,然后有一个进位到行N-1。

2 个答案:

答案 0 :(得分:2)

根据您的意见,我建议您执行以下操作:

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

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

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

答案 1 :(得分:2)

您可以使用存储过程生成自定义自动增量值,如下所述:

http://en.latindevelopers.com/ivancp/2012/custom-auto-increment-values/

您将获得以下密钥:

SELECT * FROM custom_autonums;
+----+------------+------------+
| id | seq_1      | seq_2      |
+----+------------+------------+
|  4 | 001-000001 | DBA-000001 |
|  5 | 001-000002 | DBA-000002 |
|  6 | 001-000003 | DBA-000003 |
|  7 | 001-000676 | DBA-000004 |
|  8 | 001-000677 | DBA-000005 |
|  9 | 001-000678 | DBA-000006 |

但是你可以修改存储过程来生成你的模式:000,001,002,...,009,00A,00B,...,00Z,010,...,0ZZ,...,100