Mysql 在insert into语句中重置自动增量

Mysql 在insert into语句中重置自动增量,mysql,innodb,sql-insert,Mysql,Innodb,Sql Insert,我有一张表格发票,上面有: id(自动增量), 年, invoiceNum, 日期 我正在做一个Insert语句 当年份改变时,NumInvoice必须重置。例如检查上一年和当前年份,如果它们不同,则重置它 到目前为止,我有: insert into invoice values (null, YEAR(CURDATE()),CONCAT(YEAR(CURDATE()),LAST_INSERT_ID()+1),CURRENT_TIMESTAMP()); 有没有办法在同一个insert语句上执行

我有一张表格发票,上面有: id(自动增量), 年, invoiceNum, 日期

我正在做一个Insert语句

当年份改变时,NumInvoice必须重置。例如检查上一年和当前年份,如果它们不同,则重置它

到目前为止,我有:

insert into invoice values (null, YEAR(CURDATE()),CONCAT(YEAR(CURDATE()),LAST_INSERT_ID()+1),CURRENT_TIMESTAMP());
有没有办法在同一个insert语句上执行NumInvoice重置


提前感谢。

编写一个存储例程,查看表中最新的项目,与当前日期进行比较,然后决定“下一个”数字应该是什么

它不能涉及自动增量,并且必须为每个新发票调用它


或者您可以放弃生成发票号码的方法。

我得到了一些解决方案,没有存储例程

INSERT INTO invoice (year,number,date)  SELECT  YEAR(CURDATE()),COUNT(*) + 1 ,CURDATE() FROM invoice WHERE year = YEAR(CURDATE());
在这里输入代码

有没有办法用存储例程做到这一点


关于

您确实希望重置自动增量列。如果您这样做,您将丢失使用它链接的其他表中的所有行。有趣的是,您有什么理由希望这样做?对不起,这不是id,而是numInvoice。numInvoice必须像自动增量一样,但当年份发生变化时,重置该numInvoice并重新开始。(编辑)