Java唯一键实现方案

数据唯一性

在Java项目开发中,对数据的唯一性要求,业务数据入库的时候保持单表只有一条记录,因此对记录中要求有唯一可区分的ID,主要可使用以下几种方案。

1、生成UUID

主要有两种方式:Java调用uuid类 或者 使用MySQL 数据库中函数实现。

1.1 代码中实现

直接在类中引用 UUID包,使用 randomUUID方法即可,代码如下所示。

java 复制代码
java.util.UUID
public String getSerialNo(){
	UUID uuid = UUID.randomUUID();
	String uuidStr = uuid.toString().replace("-", "");
	return uuidStr;
}

1.2 数据库中实现

使用UUID函数自动生产ID,作为数据的唯一ID,存放到数据库中。

sql 复制代码
select UUID() as str,REPLACE(UUID(),'-','') as newStr

优点

1、直接调用uuid函数即可生成

缺点

1、可能有重复,生成的结果不好记忆

2、数据库递增主键

在数据库建表时,即可指定ID为递增,即AUTO_INCREMENT,当业务数据入库时,则无需获取主键ID,建表脚本如下所示。

sql 复制代码
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命令,即可创建序列。

sql 复制代码
// 创建序列
create sequence serial_no_sequence INCREMENT BY 1 strat with 1;

sequence创建知识

INCREMENT BY 每次增加步长

strat with 指定从起始位开始增长

3.2 使用序列

对应创建的序列,直接select查询使用即可,命令如下所示。

sql 复制代码
// 查询序列
select serial_no_sequence.nextval;

优点

1、可自定义序列的名称,步长,起始等

缺点

1、序列需要先创建,才能使用;必须获取创建序列的权限。

相关推荐
777VG1 小时前
PostgreSQL +martin将多张表输出成一个 MVT
前端·数据库·postgresql
aax12134532 小时前
VOC 集群治理工程实操|美丽蓝天绿岛项目 RTO 工艺选型、管控方案与申报要
大数据·数据库·人工智能
IvorySQL2 小时前
PG 日报|优化缓冲区批量扫描,降低多套接字并发竞争
数据库·人工智能·postgresql·开源·区块链
前端工作日常2 小时前
我学习到的Java中domain和dto区别
java·后端
这个DBA有点耶3 小时前
交易型数据库是什么?OLTP核心能力与2026选型指南
数据库·数据仓库·sql·database·数据库架构·olap·dba
大熊猫侯佩3 小时前
WWDC26 全新 SwiftData 的 .codable 宏选项:它不是泛型专用胶水
数据库·swift·apple
码农学院3 小时前
基于Spring Boot的跨境电商多语言订单管理系统架构设计
java·大数据·spring boot
技术小结-李爽4 小时前
【工具】pom文件的<packaging>
java·maven
l156469484 小时前
突围!图文混合知识库难以解析,Kimi-K3 原生视觉架构深耕知识工作,DMXAPI 统一接口,缩短项目开发周期
java·大数据·开发语言
童谣15 小时前
越华环保集团市级统筹申报数字化中台:政策校验与减排仿真一体化架构
数据库·架构