【发布时间】:2014-09-19 13:58:35
【问题描述】:
我有一个证书数据库 (MySql),每个证书都由一个代码标识,格式如下:
year-number
其中 Year 是获得证书的年份的最后两位数字,Number 是五位数字的增量数字(例如 14-12345)。每年,数字部分都必须重置。所以 2015 年的第一个证书将是 15-00001。
我的问题是代码的“数字”部分。现在我正在这样做:
SELECT MAX(Number) FROM certificates WHERE Year = YEAR(NOW())
然后,在我的应用程序的单独语句中,类似这样的内容(要简化的伪代码):
INSERT INTO certificates (Year, Number) VALUES (YEAR(NOW()), ++Number)
在循环内,插入多个新证书。
这可行,但在并发插入方面并不那么安全。也许我可以使用事务,但我认为有更好的方法。
我想到另一个表中的自动增量值和主表中的外键,但我不知道如何在每年更改时重置。
【问题讨论】:
-
对表的主键使用自动递增的整数。使证书代码成为您通过触发器维护的另一列。
标签: mysql sql database-design