日期:2014-05-19  浏览次数:20594 次

mysql的主键根据年份设计问题
需要设计一个表,主键为int (8)
前四位是年份,后四位是数字,比如2012年的就是20120001,增加一条语句就为20120002
到2013年就重新开始,20130001,20130002 这样子。
这该如何实现?用java怎么写?

------解决方案--------------------
插入前进行逻辑组装吧
------解决方案--------------------
一般就是在程序中实现吧,直接根据日期来生成要方便的多。
------解决方案--------------------
get当前年份 +数据库当前年的记录数=前四位是年份,后四位是数字,比如2012年的就是20120001
------解决方案--------------------
SQL code

create table tt(aa int);
insert into tt(aa) values('20110001');
select ifnull(zz,(year(now())*10000)+1) from tt,
              (select max(aa) zz from tt where aa>(year(now())*10000)) mm;

------解决方案--------------------
探讨
需要设计一个表,主键为int (8)
前四位是年份,后四位是数字,比如2012年的就是20120001,增加一条语句就为20120002
到2013年就重新开始,20130001,20130002 这样子。
这该如何实现?用java怎么写?

------解决方案--------------------
都是 在 程序中实现 


------解决方案--------------------
CONCAT(DATE_FORMAT( NOW() ,'%Y'),MID('0000',LENGTH(id)+1),id) id 为你传过来的值
------解决方案--------------------
空闲了 有来逛了下 写了能查出上条 并根据你的要求得到一个插进去的值 看能不能帮到你 不妨试试
SELECT CONCAT(DATE_FORMAT( NOW() ,'%Y'),
MID("0000",LENGTH(MID(IFNULL(MAX(t.id),1),5)+1)+1),MID(IFNULL(MAX(t.id),'00000'),5)+1) 
 FROM test t

WHERE MID(t.id,1,4) = DATE_FORMAT( NOW() ,'%Y')