-
2019-05-28 15:00:57
UUID.randomUUID();
或者获取时间到秒获取唯一主键
或者写算法获取唯一主键
更多相关内容 -
SQL Server 创建约束图解(唯一 主键)
2020-12-15 15:14:31什么是主键? 在数据库中,常常不只是一个表,这些表之间也不是相互独立的。不同的表之间需要建立一种关系,才能将它们的数据相互沟通。而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段... -
Oracle生成唯一主键
2020-12-14 10:40:36主键生成有两种方式 一种是使用oracle提供的sys_guid() 生成16个字节的原始值 一种是使用序列加上触发器 第一种sys_guid() 首先执行查看一下 select sys_guid() from dual; 能看到打印出来的是一个32位字符串 在创建...主键生成有两种方式
一种是使用oracle提供的sys_guid() 生成16个字节的原始值
一种是使用序列加上触发器
第一种sys_guid()
首先执行查看一下
select sys_guid() from dual;能看到打印出来的是一个32位字符串
在创建表的时候给需要作为主键的字段加上一个默认值default设置
create table test_user ( guid varchar2(36) default sys_guid() NOT NULL PRIMARY KEY );
第二种使用Sequence
首先创建一张表,名为TEST_USER
CREATE TABLE TEST_USER ( ID NUMBER(11) NOT NULL PRIMARY KEY, USER_ID VARCHAR2(11), USER_NAME VARCHAR2(11), CREATED_BY VARCHAR2(11), GMT_CREATE DATE, MODIFIED_BY VARCHAR2(11), GMT_MODIFIED DATE, IS_DELETED NUMBER(1) );
给TEST_USER表添加注释说明
-- 添加表注释 COMMENT ON TABLE TEST_USER IS '测试用户表'; -- 添加字段注释 COMMENT ON COLUMN TEST_USER.ID IS '主键'; COMMENT ON COLUMN TEST_USER.USER_ID IS '用户ID'; COMMENT ON COLUMN TEST_USER.USER_NAME IS '用户名称'; COMMENT ON COLUMN TEST_USER.CREATED_BY IS '创建人'; COMMENT ON COLUMN TEST_USER.GMT_CREATE IS '创建时间'; COMMENT ON COLUMN TEST_USER.MODIFIED_BY IS '修改人'; COMMENT ON COLUMN TEST_USER.GMT_MODIFIED IS '修改时间'; COMMENT ON COLUMN TEST_USER.IS_DELETED IS '1 表示删除,0 表示未删除';
创建一个序列号
CREATE SEQUENCE TEST_USER_ID -- 序列号名称 MINVALUE 1 -- 最小值 MAXVALUE 999999999 -- 最大值 INCREMENT BY 1 -- 自增步长为1 START WITH 1; -- 初始值
为TEST_USER表创建一个主键ID字段自动增长的触发器
CREATE OR REPLACE TRIGGER TRIGGER_TEST_USER_ID BEFORE INSERT -- 添加数据前 ON TEST_USER -- 触发器作用的对象 FOR EACH ROW -- 指定创建的是行级触发器 BEGIN SELECT TEST_USER_ID.nextval -- 使用名为TEST_USER_ID的序列号 INTO :NEW.ID FROM dual; END;
-
Java生成唯一主键
2019-05-10 09:39:43一般有时候我们需要生成唯一主键id,如果数据库是mysql我们可以使用主键自增,如果是oracle我们可以创建触发器或者序列,如果不借助数据库我们也可以在java层面自己生成唯一主键。 代码如下: /* 生成唯一主键 ...一般有时候我们需要生成唯一主键id,如果数据库是mysql我们可以使用主键自增,如果是oracle我们可以创建触发器或者序列,如果不借助数据库我们也可以在java层面自己生成唯一主键。
- 使用随机数:
/* 生成唯一主键 格式:时间+随机数 */ public static String genUniqueKey() { Random random = new Random(); Integer number = random.nextInt(900000) + 100000; return System.currentTimeMillis() + String.valueOf(number); }
- 使用UUID
public static String getUUID(){ UUID uuid=UUID.randomUUID(); String uuidStr=uuid.toString(); return uuidStr; }
-
MySQL约束(主键,唯一,非空,外键)
2020-12-14 13:46:36MySQL约束(主键,唯一,非空,外键) 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。 分类: 1. 主键约束:primary key 2. 非空约束:not null 3. 唯一约束:unique 4. 外键约束:foreign key ... -
Java利用时间戳生成三种唯一主键
2020-05-25 02:19:40/** * @Author: lgz * @Date: 2020/5/24 23:44 */ public enum IdUtil { //有年月日的时间id TIME_DATE_ID { public long generateId() { return Long.parseLong(DateTimeFormatter.ofPattern(.../** * @Author: lgz * @Date: 2020/5/24 23:44 */ public enum IdUtil { //有年月日的时间id DATE_TIME_ID { public long generateId() { return Long.parseLong(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS") .format(LocalDateTime.ofInstant(Instant.ofEpochMilli(super.generateId()), ZoneId.systemDefault()))); } }, //直接返回时间戳 TIMESTAMP_ID { public long generateId() { return super.generateId(); } }, //时间戳左移10 SHIFT_ID { public long generateId() { return super.generateId() << 10; } }; //上一次的时间戳 //在集群环境中,可以使用redis存储上一次时间 private long lastTimestamp = -1L; //在集群环境中,可以使用分布式锁 private Lock lock = new ReentrantLock(); private long nowTimestamp; public long generateId() { lock.lock(); nowTimestamp = 0; try { nowTimestamp = Instant.now().toEpochMilli(); if (lastTimestamp == nowTimestamp) { lastTimestamp = waitNextMilli(); } else if (lastTimestamp > nowTimestamp) { throw new RuntimeException("time error when generated the id."); } else { lastTimestamp = nowTimestamp; } } finally { lock.unlock(); } if (nowTimestamp == 0) { throw new RuntimeException("unknown error when generated the id."); } return nowTimestamp; } private long waitNextMilli() { //判断是否进入下一毫秒 //如果并发量特别高,会给cpu带来额外负荷 do { nowTimestamp = Instant.now().toEpochMilli(); } while (nowTimestamp == lastTimestamp); return nowTimestamp; //直接睡一毫秒 // try { // TimeUnit.MILLISECONDS.sleep(1); // } catch (InterruptedException e) { // e.printStackTrace(); // } // nowTimestamp = Instant.now().toEpochMilli(); // return nowTimestamp; } }
-
oracle数据库自动生成唯一主键的简单方法
2020-09-01 11:42:16大家都知道mysql数据库可以直接使用autoincrement关键字实现id的自动生成、增长,但是在oracle数据库,怎么实现类似的自动生成唯一的主键呢?其实很简单,例子如下: CREATE TABLE student( id varchar2(32) default... -
Sharding JDBC (八) 分布式唯一主键
2020-05-14 15:02:01三、Sharding JDBC 使用Snowflake生成唯一主键ID 配置文件制定 使用DefaultKeyGenerator 类获取 Snowflake时钟回拨问题 一、 Sharding-JDBC主键 软件项目开发中,主键自动生成是基本需求。而各个数据库对于该... -
简单方式ORACLE数据库自动生成唯一主键
2019-04-23 11:30:15在oracle8i以后提供了一个生成不重复...其应用场景:当数据库某字段设置为唯一,则可用次生成(比如主键); 获取方式select sys_guid() from dual ; 结合MyBatis框架的应用,只需要在数据库插入操作时加入: &... -
分布式数据库唯一主键设计
2017-06-10 22:41:28分布式数据库唯一主键设计 -
MongoDB给表设置唯一主键记录。
2019-07-17 15:23:55爬虫时,存入MongoDB,防止数据重复可以添加主键 db.表名.ensureIndex({'字段名':1},{unique:true}) -
项目中唯一主键生成方案
2019-05-08 10:28:14第一种方案:利用Redis的incr函数 由于Redis是单线程的,因此订单号生成也就不会重复,但是Redis有个非常大的缺陷,那就是不太稳定,容易故障。我们可以使用Redis集群来提高安全性,但是还是有可能集群的所有Redis... -
JAVA生成唯一主键uuid的方法 (UUID方法)
2021-04-30 19:52:43在平时开发时,如果没有定义数据库自动生成ID的机制,可以使用java自带的uuid生成随机唯一主键,在插入数据库时,可以直接给ID主键赋值;这个uuid方法,在java自带的utils包里,就可以直接调用: 示例: public ... -
Oracle唯一主键ID的生成
2017-06-09 18:49:34SYS_GUID产生并返回一个全球唯一的标识符(原始值)由16个字节组成。在大多数平台,生成的标识符由主机标符,执行函数的进程或者线程标识符,和进程或线程的一个非重复的值(字节序列)组成。可以用来生成唯一标识ID。 ... -
redis 来生成全局唯一主键
2018-06-12 13:40:09[quote] https://blog.csdn.net/UnknownZYB/article/details/78334250 [/quote] -
db2中常用的生成唯一主键的几种方式
2020-06-16 17:13:26db2中常用的生成唯一主键的几种方式 一、generate_unique() 这个方法类似于Oracle中的sys_guid(),用于生成一个随机不重复的13个字节的字符串。常常用来作为表的主键使用。 create table customers ( custno ... -
mysql生成唯一主键
2016-12-26 17:16:24使用mysql的UUID()函数,但因为UUID()生成的数值是含有"-"的,因此使用REPLACE(UUID(),'-',''),生成32位唯一主键 -
hive中几种唯一主键的选择和优劣比较
2019-07-23 16:40:19hive表是没有主键的,但在建表时最好加一个主键,方便查询。联合主键另说,其实也就可一利用联合主键来。 1.uuid 2.row_number() 例子: insert into tbl_dim select row_number() over (order by tbl_stg.id) + t2.... -
MySQL 创建主键,外键和复合主键的语句
2020-12-15 08:17:171.创建主键语法 ALTER TABLE table_name ADD CONSTRAINT pk_name ...使用组合主键 如果一列不能唯一区分一个表里的记录时,可以考虑多个列组合起来达到区分表记录的唯一性,形式 ①创建时:create table sc ( student -
SQL Server 创建约束图解 唯一 主键
2017-11-14 11:23:58SQLServer中有五种约束,Primary Key约束、Foreign Key约束、Unique约束、Default约束和Check约束,今天使用SQL Server2008来演示下这几种约束的创建和使用的方法。... 这样的一列或多列成为表的主键(Prim -
java中获取日期以及由时间生成唯一主键
2018-11-02 16:14:57import java.text.SimpleDateFormat; import java.util.Calendar;...同时,我在思考如何保证在一天时间内生成唯一的7位随机数字,这样组合成的主键(日期时间+7位随机数)是唯一的。欢迎留言评论! -
SQLServer主键和唯一约束的区别
2021-01-19 22:32:21首先说明一点,主键又称主键约束,它也是一种约束,看下它和唯一约束的创建语法: alter table Person add constraint PK_Id primary key (Id) alter table Person add constraint UQ_Name unique (Name) 主键和... -
通过 Redis 生成唯一顺序主键
2020-06-13 14:10:07在分布式项目中经常会用到生成唯一主键,或者生成顺序号,现通过Redis实现顺序号的生成。 话不多说,直接上代码 1、生成唯一主键工厂方法接口如下 /** * 获取唯一序列工厂方法 */ public interface ... -
数仓业务上判断一个表的唯一主键是哪几个字段
2022-04-26 10:46:13平时业务量比较大,一张HIVE表里面的字段也比较多,如何判断所select 的这几个字段是这张表的唯一主键,也就是,选取这几个主键,可以唯一确定只有一行数据 可以通过,select A,B,C from table group by A,B,C ... -
MySQL主键约束和唯一性约束
2021-03-15 21:54:14MySQL主键约束和唯一性约束都是索引,它们的区别是:主键字段可以确保唯一性,但主键字段不能为NULL.唯一性约束可以确保唯一性,MySQL主键约束和唯一性约束都是索引,它们的区别是:mysql-workbench无法创建多字段... -
深入理解分布式技术 - 分库分表后的唯一主键解决方案
2021-02-02 22:32:52文章目录Question生成主键的常见方案UUID ? (不推荐)Snowflake缺点:时钟回拨数据库维护区间分配总结 Question 在单库单表时,业务 ID 可以依赖数据库的自增主键实现,现在我们把存储拆分到了多处,如果还是用...