数据唯一性
- 1、生成UUID
- 1.1 代码中实现
- 1.2 数据库中实现
- 优点
- 缺点
- 2、数据库递增主键
- 优点
- 3、数据库递增序列
- 3.1 创建序列
- 3.2 使用序列
- 优点
- 缺点
在Java项目开发中,对数据的唯一性要求,业务数据入库的时候保持单表只有一条记录,因此对记录中要求有唯一可区分的ID,主要可使用以下几种方案。
1、生成UUID
主要有两种方式:Java调用uuid类 或者 使用MySQL 数据库中函数实现。
1.1 代码中实现
直接在类中引用 UUID包,使用 randomUUID方法即可,代码如下所示。
java.util.UUID
public String getSerialNo(){
UUID uuid = UUID.randomUUID();
String uuidStr = uuid.toString().replace("-", "");
return uuidStr;
}
1.2 数据库中实现
使用UUID函数自动生产ID,作为数据的唯一ID,存放到数据库中。
select UUID() as str,REPLACE(UUID(),'-','') as newStr
优点
1、直接调用uuid函数即可生成
缺点
1、可能有重复,生成的结果不好记忆
2、数据库递增主键
在数据库建表时,即可指定ID为递增,即AUTO_INCREMENT,当业务数据入库时,则无需获取主键ID,建表脚本如下所示。
CREATE TABLE `tb_sku` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`sku_id` bigint(20) DEFAULT NULL COMMENT '商品ID',
`sku_name` varchar(128) DEFAULT NULL COMMENT '商品名称',
`is_enable` tinyint(4) DEFAULT NULL COMMENT '是否有效 1 有效 0 无效',
`is_delete` tinyint(4) DEFAULT NULL COMMENT '是否已删除 : 是否已删除',
`remark` varchar(256) DEFAULT NULL COMMENT '备注',
`created_by` varchar(20) DEFAULT NULL COMMENT '创建人 ID',
`created_time` datetime DEFAULT NULL COMMENT '创建时间',
`modified_by` varchar(20) DEFAULT NULL COMMENT '修改人 ID',
`modified_time` datetime DEFAULT NULL COMMENT '修改时间',
`field1` varchar(128) DEFAULT NULL COMMENT '预留字段1',
`field2` varchar(128) DEFAULT NULL COMMENT '预留字段2',
PRIMARY KEY (`id`) USING BTREE,
KEY `sku_id` (`sku_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';
优点
1、建表时即可指定
3、数据库递增序列
3.1 创建序列
对于不需要取数据库主键的场景,可自定义序列,使用 create sequence命令,即可创建序列。
// 创建序列
create sequence serial_no_sequence INCREMENT BY 1 strat with 1;
sequence创建知识
INCREMENT BY 每次增加步长
strat with 指定从起始位开始增长
3.2 使用序列
对应创建的序列,直接select查询使用即可,命令如下所示。
// 查询序列
select serial_no_sequence.nextval;
优点
1、可自定义序列的名称,步长,起始等
缺点
1、序列需要先创建,才能使用;必须获取创建序列的权限。