的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自动增量字段。
答案 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