MySQL:自定义自动生成密钥(AUTO_INCREMENT /多列索引)

时间:2011-06-16 01:13:34

标签: mysql

MySQL用作数据库。

作为库存系统的一部分,我需要生成库存号,这是资产的唯一标识符。客户要求此数字不仅仅是自动增量整数,而是遵循以下模式: @ BusinessUnit @ YYYY @编号

,其中

@BusinessUnit =表示业务单位的字符串; @YYYY =当前年份; @ Number = n =此BusinessUnit&的唯一编号今年:今年在系统中注册并准备出售的第n项资产。

例如,假设我们有各种用户输入2个业务单位= {NY,CA}的资产。库存编号预计如下: NY201100001 NY201100002 CA201100001 NY201100003 CA201100002

到目前为止,基于可用的手册,首先想到的是使用AUTO_INCREMENT并为每个业务单元设置单独的表,并在插入时触发,其中从数字自动生成的id更新库存表插入后包含所有业务单位资产,其中包含生成的id连接的业务部门和前一年。 另外,作为新年的第一件事,重置AUTO_INCREMENT = 0 - 改变所有表格。

有没有更好的方法和能力避免需要创建多个表,我可以创建多种方式的多列索引吗?如果是,请提供适当的表格定义样本吗?

2 个答案:

答案 0 :(得分:1)

无视客户(部分)。

使用自动递增“InventoryID”创建表,以保证记录中任何其他内容的简单,断开连接的上下文。创建一个SECOND列,它是“InventoryIDUnit”,可以是与您负责保留的业务规则匹配的“候选”键。当在“InventoryIDUnit”(特别是格式化的字段)上进行搜索时,在内部并通过系统的其余部分进行搜索时,您将拥有INTERNAL数字,以便在整个系统中连接下来。

想一下客户订单系统。如果你根据一个人的名字得到它,那里有多少“Jane Doe”版本......它们是否相同......在内部,客户有一个ID,所有订单都返回到该公共ID。然后,简结婚,现在是“简史密斯”...你打算回过头来重新命名所有条目到新名称???这就是代理密钥的全部目的。

答案 1 :(得分:0)

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

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 |