自动增量 - 每年自动重置

时间:2015-05-11 12:24:47

标签: mysql innodb auto-increment

的MySQL / InnoDB的

就我而言,我的收据应按年度计算; 2015年1月,2015年2月...... 556/2015等。当明年到来时,柜台应该从1开始,收据应计为1/2016,20/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自动增量字段。

2 个答案:

答案 0 :(得分:4)

在@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;

答案 1 :(得分:0)

这不是AUTO_INCREMENT的正确用法。如果你想要像你描述的那样特别的东西,那就自己动手吧。

MyISAM有这样的功能(PRIMARY KEY中的第二列可能是AUTO_INCREMENT)。但InnoDB最近是首选。模拟它的方法是my blog