当前位置: 首页 > news >正文

Java唯一键实现方案

数据唯一性

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

http://www.lryc.cn/news/476159.html

相关文章:

  • opencv - py_imgproc - py_canny Canny边缘检测
  • Spring Boot 创建项目详细介绍
  • 70B的模型需要多少张A10的卡可以部署成功,如果使用vLLM
  • clickhouse配置用户角色与权限
  • 面试题整理 4
  • React基础大全
  • 51c大模型~合集10
  • 【已解决】element-plus配置主题色后,sass兼容问题。set-color-mix-level() is...in Dart Sass 3
  • JavaWeb——Web入门(4/9)-HTTP协议:请求协议(请求行、请求头、请求体、演示 )
  • 软考:数据库考点总结
  • Flash的语音ic型号有哪些?
  • 10天进阶webpack---(1)为什么要有webpack
  • HTML CSS
  • 第03章 MySQL的简单使用命令
  • 【C++动态规划】2435. 矩阵中和能被 K 整除的路径|1951
  • 三、Kafka集群
  • [数据结构]堆
  • UDP-鼠李糖合成酶基因的克隆与鉴定-文献精读76
  • 【H2O2|全栈】JS进阶知识(四)Ajax
  • Spring IOC的工作流程
  • 从新手到专家:7款电脑平面设计软件评测
  • 【C++】如何让C++字符串更快、C++的小字符串优化
  • C++《list》
  • strongswan中METHOD定义
  • Rive 动画框架竟然支持响应式布局,全平台动画框架开启全新 UI 交互能力
  • MQ的详细大全知识点
  • AI图像相似性搜索对比:VIT, CLIP, DINO-v2, BLIP-2
  • 【tomcat系列漏洞利用】
  • 前端学习-盒子模型(十八)
  • 【C++】类和对象(十二):实现日期类