2011-03-08 86 views
2

我想在自动递增1的mysql数据库中创建一列,但是从0-Z开始,然后滚动。MySQL自动递增自定义值

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

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

的想法,我已经是:

  1. 创建从0-36进入每个字符列,则自动增加排N(其中N是最显著数字)1。然后添加一个触发器在列N到达36时在每列上添加1到列N-1。
  2. 创建一个包含36行的表,其中每行包含一个字符0-Z,并从表中采用类似进位逻辑从表中拉出相应的字符
  3. 创建存储过程以根据项目1执行适当的逻辑
  4. 让实际程序生成一个值并将其插入表中
  5. 有一个常规的自动递增值并计算序列中的下一个值(这是最不理想的,因为它使得查找时很难解析数据库)

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

+1

您是否还打算使用此列作为你的Prim ary键? – Stephen 2011-03-08 04:54:18

+0

我想,但它不是绝对nessicary – 2011-03-08 05:07:08

+0

行,所以你可以解释字母数字ID背后的原因 - 为什么是auto_incremenet不足够的常规整数字段? – Stephen 2011-03-08 05:11:31

回答

2

根据您的意见,我的建议是要做到以下几点:

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

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

如果你打算根据标识符进行查找(也许用户输入一个标识符来“跳转”到一条记录),你需要在该列上有一个索引。

+1

您是否尝试过?直到'BEFORE'触发器运行后才会生成自动增量值,并且修改'AFTER'触发器中的任何列为时已晚。 – 2014-05-26 23:21:38

+0

您可以修改AFTER触发器中的列 - 'UPDATE foo set bar ='bas'where id = NEW.id' – Stephen 2014-05-28 06:49:20

+1

'错误1442(HY000):无法更新存储函数/触发器中的表'foo',因为它已被调用此存储函数/触发器的语句使用。“# – 2014-05-28 07:04:37

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

+0

爱看代码。但是,唉,403禁止。 – 2015-05-27 00:46:49

+1

我正试图解决这个问题......它将在几个小时内提供。对不起@ BobStein-VisiBone – 2015-05-27 17:00:46