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

相关推荐
n北斗7 分钟前
常用类晨考day15
java
骇客野人10 分钟前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
yuanbenshidiaos1 小时前
c++---------数据类型
java·jvm·c++
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
Lojarro2 小时前
【Spring】Spring框架之-AOP
java·mysql·spring
莫名其妙小饼干2 小时前
网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
java·开发语言·maven·mssql
梦想平凡2 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
isolusion2 小时前
Springboot的创建方式
java·spring boot·后端
TianyaOAO2 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong2 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存