Java MySQL自定义主键生成器
我已经为我们的预订系统编写了一个发票模块 因此,当我创建新发票时,我会通过MySQL自动生成一个主键 然而目前这只是一个简单的整数 问题在于,我们有义务以yearid的形式提供发票编号,其中年份为2013年,id是每年从1开始的id 因此,例如201312013220133,2014年将是2014120142Java MySQL自定义主键生成器,java,mysql,primary-key,generator,Java,Mysql,Primary Key,Generator,我已经为我们的预订系统编写了一个发票模块 因此,当我创建新发票时,我会通过MySQL自动生成一个主键 然而目前这只是一个简单的整数 问题在于,我们有义务以yearid的形式提供发票编号,其中年份为2013年,id是每年从1开始的id 因此,例如201312013220133,2014年将是2014120142 如何使用自定义主键生成器解决此问题?您可以在、年份和id中创建两个字段 在两个字段上都设置一个主键,为id提供自动递增选项。 对于一年中的每个唯一值,id都将累加。例如: 2012
如何使用自定义主键生成器解决此问题?您可以在、年份和id中创建两个字段 在两个字段上都设置一个主键,为id提供自动递增选项。 对于一年中的每个唯一值,id都将累加。例如:
2012 1
2012 2
2012 3
2013 1
您可以在选择时对其进行合并:从表中选择CONCATyear,id作为主
插入将是:
插入表格集合年份=截止日期
您不必指定id。您可以在、年份和id中创建两个字段 在两个字段上都设置一个主键,为id提供自动递增选项。 对于一年中的每个唯一值,id都将累加。例如:
2012 1
2012 2
2012 3
2013 1
您可以在选择时对其进行合并:从表中选择CONCATyear,id作为主
插入将是:
插入表格集合年份=截止日期
您不必指定id。您应该使用过程或触发器。 构建newInvoiceId的特定查询应如下所示:
SELECT CONCAT(YEAR(now()),count(*)+1) as newInvoiceId
FROM table
WHERE InvoiceId like CONCAT(YEAR(now()),'%');
我唯一没有100%信心的部分是ConcatDenshow,“%”你应该使用程序或触发器。 构建newInvoiceId的特定查询应如下所示:
SELECT CONCAT(YEAR(now()),count(*)+1) as newInvoiceId
FROM table
WHERE InvoiceId like CONCAT(YEAR(now()),'%');
我唯一没有100%信心的部分是ConcatDearhow,“%”这是对像2012/01这样天真的一年/一周的警告。渴望是错误的
最好使用你知道的。给出一个类似201201的数字
以下显示年份不一定是周数:
mysql> SELECT YEARWEEK('1987-01-01');
-> 198652
对于剩下的部分,在一个整数中包含年和周,实际上更简单
int year = yearweek / 100;
int week = yearweek % 100;
警告不要像2012/01那样天真的一年/一周。渴望是错误的
最好使用你知道的。给出一个类似201201的数字
以下显示年份不一定是周数:
mysql> SELECT YEARWEEK('1987-01-01');
-> 198652
对于剩下的部分,在一个整数中包含年和周,实际上更简单
int year = yearweek / 100;
int week = yearweek % 100;
如果可能,您希望使用java或本机sqlNative SQL执行此操作。如果可能,您希望使用java或本机sqlNative SQL执行此操作。请注意,该表必须是MyISAM才能正常工作。请注意,该表必须是MyISAM才能正常工作