Oracle创建自增长主键
Oracle主键常用的分为UUID和自增长int两种,下面简单说下各自的优缺点:
UUID的优点
1、生成方便,不管是通过sys_guid() 还是java的uuid都能很方便的创建UUID。
2、适合批量数据中的插入和更新操作。
3、跨服务器数据合并非常方便。
INT自增长的优点
1、占用空间小
2、性能好,UUID跟int比起来不在一个级别上
3、容易记忆
他们各自的优点就是彼此的缺点
适用范围:
一般在分布式环境中使用UUID作为唯一主键,至于其他项目本人强烈建议使用int作为主键。
PS:最近我的一个分布式项目在周末访问高峰期也是会出现UUID重复的情况,所以UUID号称的全球唯一ID这个优点我没写上去,而我们可以使用Zookeeper作为主键生成器创建int类型的唯一主键,这是完全没有问题的。
所以综上我还是建议所有的主键都应该使用int类型,在千万级别的数据量上int类型的优点尤为明显。
Oracle创建自增长的步骤:
创建自增长序列
-- 创建自增长序列
create sequence seq_on_chance_contract
increment by 1 -- 每次加1
start with 1 -- 从1开始计数
nomaxvalue -- 不设置最大值
nocycle -- 一直累加
nocache;
create table TBL_CHANCE_CONTRACT
(
ID INTEGER PRIMARY KEY,
CHANCE_SUCCESS_ID VARCHAR2(50) not null,
CONTENT CLOB,
CREATE_USER_ID VARCHAR2(50),
CREATA_USER_NAME VARCHAR2(80),
CREATE_DATE TIMESTAMP(6)
)
创建主键触发器,以便新增记录的时候不需要管理ID主键
-- 创建主键触发器
CREATE OR REPLACE TRIGGER tg_on_id_chance_contract
BEFORE INSERT ON TBL_CHANCE_CONTRACT FOR EACH ROW WHEN (new.ID is null)
BEGIN
SELECT seq_on_chance_contract.nextval into:new.ID from dual;
END;
一些小技巧:
查看所有的序列、表
-- 查找所有SEQUENCE、TABLE
select * from user_objects ubs;
-- 查找所有SEQUENCE
select * from user_objects ubs where ubs.OBJECT_TYPE='SEQUENCE';
查看当前序列到了多少
select seq_on_chance_contract.nextval from dual;
select seq_on_chance_contract.currval from dual;
1、利用步长参数,先查出sequence的nextval,记住,把递增改为负的这个值(反过来走),然后再改回来。
假设需要修改的序列名seq_on_chance_contract
-- 重置序列
select seq_on_chance_contract.nextval from dual; -- 假设得到结果 n
alter sequence seq_on_chance_contract increment by -2; -- 注意是 -(n-1)
select seq_on_chance_contract.nextval from dual; -- 再查一遍,走一下,重置为1了
alter sequence seq_on_chance_contract increment by 1; -- 还原
2、利用存储过程实现 (v_seqname)
create or replace procedure seq_reset(v_seqname varchar2) as n number(10);
tsql varchar2(100);
begin
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
n:=-(n-1);
tsql:='alter sequence '||v_seqname||' increment by '|| n;
execute immediate tsql;
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
tsql:='alter sequence '||v_seqname||' increment by 1';
execute immediate tsql;
end seq_reset;
然后调用存储过程:
exec seq_reset('v_seqname');
Oracle创建自增长主键的更多相关文章
- Oracle的自增长主键
自增长主键 --首先建一个表TEST create table TEST( NID int PRIMARY KEY, test1 varchar2(20), test2 varchar2(20) ...
- oracle 创建自增主键
1.创建表 create table Test_Increase( userid number(10) NOT NULL primary key, /*主键,自动增加*/ username varch ...
- Oracle创建自增主键表
1.创建表 /*第一步:创建表格*/ create table t_user( id int primary key, --主键,自增长 username varchar(), password va ...
- Oracle创建触发器实现主键自增
CREATE OR REPLACE TRIGGER "trigger_empl" before insert on extjsTest1.t_empl for each row b ...
- oracle中如何设置主键并且让其自动增长
由于oracle中是没有自动增长的的,需要自己去进行写触发器等方式去进行设置: 找了一下他人写的,有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列. 一.自增长主键 我创建一个用户的信 ...
- oracle 实现 自增主键功能
转自:https://blog.csdn.net/zxh2075/article/details/78488141 之前有一项工作是将mysql的数据库实现转移到oracle,遇到了自增主键实现的问题 ...
- 自增长主键Id的另类设计
一.引言 在使用ORM框架时,一个表有一个主键是必须的,如果没有主键,就没有办法来唯一的更新一条记录.在Sql Server数据库和Mysql数据库设置自增长的主键是一件很轻松的事情,如果在Oracl ...
- SQLServer 2005 和自增长主键identity说再见——NEWSEQUENTIALID()
``code 在SQLServer2005环境下,表的主键应该怎样设计. 目前主要用到的主键方案共三种 自动增长主键 手动增长主键 UNIQUEIDENTIFIER主键 1.先说自动增长主键,它的优点 ...
- Mycat探索之旅(4)----Mycat的自增长主键和返回生成主键ID的实现
说明:MyCAT自增长主键和返回生成主键ID的实现 1) mysql本身对非自增长主键,使用last_insert_id()是不会返回结果的,只会返回0:这里做一个简单的测试 创建测试表 ------ ...
随机推荐
- JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)
3462. [NOIP2013模拟联考5]休息(rest) (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed ...
- (新手)使用pandas操作EXCEL
import pandas as pdimport numpy as npfrom pandas import DataFrame,Series#path = r'C:\Users\tsl\Deskt ...
- kubectl alias auto complete
平时kubectl命令管理kubernetes,敲久了就觉得比较麻烦,想着使用alias k来代替kubectl,可是当输入k时没有了自动补全的功能 这里在 ~/.bashrc 添加如下配置后,可以自 ...
- Jin Ge Jin Qu hao UVA - 12563 01背包
题目:题目链接 思路:由于t最大值其实只有180 * 50 + 678,可以直接当成01背包来做,需要考虑的量有两个,时间和歌曲数,其中歌曲优先级大于时间,于是我们将歌曲数作为背包收益,用时间作为背包 ...
- Storm: 性能优化 (转载)
Storm 性能优化 原文地址:http://www.jianshu.com/p/f645eb7944b0 目录 场景假设 调优步骤和方法 Storm 的部分特性 Storm 并行度 Storm 消 ...
- va_list
void Log( const TCHAR *pszFormat, ... ) { TCHAR buf[] ; va_list arglist ; try { _tcscpy_s ( buf, , _ ...
- unknow table alarmtemp error when drop database (mysql)
Q: unknow table alarmtemp error when drop database (mysql) D: alarmtemp is table in rtmd database. ...
- laravel5.2总结--blade模板
## 1.基本用法 ``` ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div ...
- JS空数组的判断
前言 最近在做一个mini项目,被大神各种鄙视,基础知识确实是不扎实,加油加油.好了,不多废话,抽空写写遇到的两个知识点,就记录下来,写博客还是能帮忙整理记录的,不然过了就忘记了. input监听值改 ...
- Python+Selenium练习篇之8-利用css定位元素
前面介绍了,XPath, id , class , link text, partial link text, tag name, name 七大元素定位方法,本文介绍webdriver支持的最后一个 ...