每年重置的自动增量列

时间:2014-09-19 13:58:36

标签: mysql sql database-design

我有一个证书数据库(MySql),每个证书都由一个代码标识,格式如下:

year - number

其中Year是获得证书的年份的最后两位数字,Number是五位数的增量数字(例如14-12345)。每年,Number部分必须重置。所以2015年的第一份证书将是15-00001。 我的问题在于" Number"部分代码。到现在为止我这样做了:

SELECT MAX(Number) FROM certificates WHERE Year = YEAR(NOW())

然后,在我的应用程序的一个单独的语句中,这样的事情(简化的伪代码):

INSERT INTO certificates (Year, Number) VALUES (YEAR(NOW()), ++Number)

在循环内部,插入多个新证书。

这可行,但在并发插入方面不太安全。也许我可以使用交易,但我认为这是一种更好的方式。

我想到了另一个表中的自动增量值和主表中的外键,但我不知道如何在每年更改时重置。

2 个答案:

答案 0 :(得分:0)

第一次执行查询时每年新年:

SELECT MAX(Number) FROM certificates WHERE Year = YEAR(NOW())

结果将是NULL 添加一张支票,然后在NULL的位置放一个代替。

答案 1 :(得分:0)

您可以在证书表中使用自动增量字段(ID)(可能已经有一个用于密钥),以及一个表格,用于收集有关每年插入的最后一个ID的信息(LastIDYear)。

您的年号字段是计算字段,其中数字部分为:

ID - (去年插入ID)。最后一年插入的ID可在上面的附加表中找到(LastIDYear)。您可以加入年份列中的表格以查找所需的所有信息。

序列中可能缺少数字..但我认为在年号证书描述中没有必要的完整序列。