Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySQL自定义主键生成器_Java_Mysql_Primary Key_Generator - Fatal编程技术网

Java MySQL自定义主键生成器

Java MySQL自定义主键生成器,java,mysql,primary-key,generator,Java,Mysql,Primary Key,Generator,我已经为我们的预订系统编写了一个发票模块 因此,当我创建新发票时,我会通过MySQL自动生成一个主键 然而目前这只是一个简单的整数 问题在于,我们有义务以yearid的形式提供发票编号,其中年份为2013年,id是每年从1开始的id 因此,例如201312013220133,2014年将是2014120142 如何使用自定义主键生成器解决此问题?您可以在、年份和id中创建两个字段 在两个字段上都设置一个主键,为id提供自动递增选项。 对于一年中的每个唯一值,id都将累加。例如: 2012

我已经为我们的预订系统编写了一个发票模块

因此,当我创建新发票时,我会通过MySQL自动生成一个主键

然而目前这只是一个简单的整数

问题在于,我们有义务以yearid的形式提供发票编号,其中年份为2013年,id是每年从1开始的id

因此,例如201312013220133,2014年将是2014120142


如何使用自定义主键生成器解决此问题?

您可以在、年份和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才能正常工作