【问题标题】: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 自动递增字段。

【问题讨论】:

  • 你必须用触发器做到这一点

标签: mysql innodb auto-increment


【解决方案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;

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 2021-08-06
    • 2021-07-12
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2014-12-05
    • 2019-05-10
    相关资源
    最近更新 更多