自动递增 - 每年自动重置

Posted

技术标签:

【中文标题】自动递增 - 每年自动重置【英文标题】:Auto-increment - automatic reset for each year 【发布时间】:2015-07-21 22:51:42 【问题描述】:

mysql/InnoDB

就我而言,我的收据应按年计算; 1/2015、2/2015 ... 556/2015 等等。明年来的时候,计数器应该重新从1开始,收据应该算作1/2016,2/2016 ...

如何定义每年自动重置的auto_increment字段?

RCID | RCNO | RCYEAR | ...
=====+======+========+====
 200 |    1 |   2015 |
 201 |    2 |   2015 |
 ... |  ... |   2015 |     
 756 |  556 |   2015 |     <- last receipt in 2015
 757 |    1 |   2016 |     <- yearly counter restarted

注意:RCID 是标准 PK 自动递增字段。

【问题讨论】:

你必须用触发器做到这一点 【参考方案1】:

在@RickJames 的帮助下,解决方案是:

CREATE TRIGGER ReceiptNumber BEFORE INSERT ON receipts FOR EACH ROW
BEGIN
  SET NEW.rcyear=YEAR(NOW());
  SET NEW.rcno=(SELECT IFNULL(MAX(rcno),0)+1 FROM receipts WHERE rcyear=YEAR(NOW()));
END;

【讨论】:

以上是关于自动递增 - 每年自动重置的主要内容,如果未能解决你的问题,请参考以下文章

重置自动递增编号

重置自动递增序列 pl-sql

Bootstrap 年数自动递增

MySQL 自动递增和选择计数

重新排序/重置自动增量主键

重新排序/重置自动增量主键