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、序列需要先创建,才能使用;必须获取创建序列的权限。

相关推荐
用户9047066835711 分钟前
如何使用 Spring MVC 实现 RESTful API 接口
java·后端
刘某某.12 分钟前
数组和小于等于k的最长子数组长度b
java·数据结构·算法
程序员飞哥16 分钟前
真正使用的超时关单策略是什么?
java·后端·面试
用户9047066835718 分钟前
SpringBoot 多环境配置与启动 banner 修改
java·后端
Full Stack Developme34 分钟前
PostgreSQL JDBC 连接参数大全
数据库·postgresql
小old弟39 分钟前
后端三层架构
java·后端
花花鱼40 分钟前
spring boot 2.x 与 spring boot 3.x 及对应Tomcat、Jetty、Undertow版本的选择(理论)
java·后端
温柔一只鬼.44 分钟前
Docker快速入门——第二章Docker基本概念
java·docker·容器
要争气1 小时前
5 二分查找算法应用
java·数据结构·算法
郑..方..醒1 小时前
java实现ofd转pdf
java·pdf