自动递增主键并每月重新播种

Auto increment primary key and reseed every month

创建具有复合主键的 SQL table 的最佳解决方案是什么。

每个月可以将 ID 重新播种为 1

我实际上需要 运行 ID,例如

"201409-00001"  
"201409-00002"   
"201409-00003"  
.  
.  
"201410-00001"   
"201410-00002"   
.  
.   
"201411-00001"      

您是否尝试过连接它们并创建一个新列使其成为主键?

不知道有没有更简单的方法,不过这个应该可以:

SELECT CONCAT(YEAR(CURRENT_TIMESTAMP), MONTH(CURRENT_TIMESTAMP),'-',ID) 
FROM <TABLE NAME>;

尝试这样的事情:

 ALTER TABLE table_name AUTO_INCREMENT = 1

还有这个:

ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '201409';

和 运行 每个月都会通过某种方法进行此查询 ;)

  1. 从 1 开始创建序列并将其连接到您的 'year,month'
  2. 在每个月的第一天创建作业并重新启动序列

根据问题和您的评论,您似乎需要以 201411-00001 格式显示行标识符。这不需要是您实际的主键。我建议你做这样的事情。

ID 创建你的 table,这是身份。添加另一列 YearMonth CHAR(6) 存储 YYYYMM 的列,或者如果您已经有一个将日期存储为 date/datetime 的列,请使用它。在你的SELECTs中你会做这样的事情

LEFT(CONVERT(VARCHAR(10),YearMonth,112),6) + '-' + RIGHT(REPLICATE('0',5) + CONVERT(VARCHAR(5),ROW_NUMBER() OVER(PARTITION BY DateCol, ORDER BY ID),5)

您也可以有一个触发器,它根据当月的 MAX(monthlyID) + 1 更新新的 INTmonthlyID

最后,我尝试使用@ughai先生的概念 我使用如下查询将值保留在另一列上以相对地表示 ID 和月份。

select LEFT(CONVERT(VARCHAR(10),YearMonth,112),6) + '-' + RIGHT(REPLICATE('0',4) + CONVERT(VARCHAR(5),ROW_NUMBER() OVER(PARTITION BY LEFT(CONVERT(VARCHAR(10),YearMonth,112),6) ORDER BY ID)),5)  from TestTable