Oracle创建自动增长列
前言:
Oracle中不像SQL Server在创建表的时候使用identity(1001,1)来创建自动增长列,而是需要结合序列(Sequences)和触发器(Triggers)来实现
创建测试表
create table tbluser
(
ID NUMBER(10) not null,
NAME VARCHAR2(50) not null,
SEX VARCHAR2(2) not null,
AGE NUMBER NOT NULL,
DESCRIPTION VARCHAR2(1000),
PRIMARY KEY("ID")
)
创建一个序列,从10000开始计数,增量为1
create sequence USER_ID
minvalue 1
maxvalue 9999999999999999999999999999
start with 10000 --从10000开始生成序列
increment by 1 --增量为1
cache 20; --预存20个序列值在内存中,这样可以提高访问序列的速度
为user表创建一个before insert的触发器,在插入之前将表user的主键设置为上面的序列值
CREATE OR REPLACE TRIGGER "USER_ID_TRIGGER" BEFORE
INSERT ON tbluser FOR EACH ROW --一定要加上For each row,表示该触发器适应于每一条记录
declare
mid number;
begin
select user_id.nextval into mid from dual; --user_id.nextval是获得上面定义的序列ORDER_ID的下一个值
:new.id:=mid; --将得到的序列值赋给表user的主键id, 可以用":new"引用将要插入的一行数据
--SELECT USER_ID.Nextval INTO :new.ID FROM dual;
end;
这样,当执行插入记录的时候,可以这样写
insert into tbluser(name,sex,age,description)values('test','女',20,'');
Oracle会调用上面创建的触发器将序列值赋值给主键ID
第二种方案:
在建完序列后直接在插数据的时候在主键的地方直接使用user_id.nextval代替
Oracle创建自动增长列的更多相关文章
- Oracle数据库自动增长列的实现过程
1.创建序列 -- Create sequence create sequence INNERID minvalue 1 maxvalue 99999999999999 start with 1 in ...
- oracle创建自增长列
--创建一个新表 /*create table students(stu_id number,stu_name varchar2(20),stu_email varchar2(40),primary ...
- 使用sql语句创建修改SQL Server标识列(即自动增长列)
一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统 ...
- SQL Server 2012 自动增长列,值跳跃问题
介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...
- Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...
- SQL Server 2012 自动增长列,值跳跃问题(自增增加1000)
介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...
- SQLite Expert 删除表数据并重置自动增长列
用下面的语句肯定是行不通的,语句不支持 truncate table t_Records 方法:1.删除表数据 2.重置自动增长列 where name='t_Records' /*name :是表名 ...
- SQL获取刚插入的记录的自动增长列ID的值
假设表结构如下: CREATE TABLE TestTable ( id int identity, CreatedDate datetime ) SQL2005获得新增行的自动增长列的语句如下: i ...
- Sql 重置自动增长列
Sql 重置自动增长列: dbcc checkident(表名, reseed, 0) 使用的情况,一般出现在主外键关联表,导致无法 truncate 只能delete的情况. 此时我们可能会需要重置 ...
随机推荐
- JavaWeb网上图书商城完整项目--day02-4.regist页面提交表单时对所有输入框进行校验
1.现在我们要将table表中的输入的参数全部提交到后台进行校验,我们提交我们是按照表单的形式提交,所以我们首先需要在table表外面添加一个表单 <%@ page language=" ...
- disruptor架构三 使用场景 使用WorkHandler和BatchEventProcessor辅助创建消费者
在helloWorld的实例中,我们创建Disruptor实例,然后调用getRingBuffer方法去获取RingBuffer,其实在很多时候,我们可以直接使用RingBuffer,以及其他的API ...
- 微信小程序navigator带参数跳转及接收参数内容
// index.wxml <navigator class='looks-view' wx:for="{{imgUrlNew}}" wx:key="index&q ...
- Freemarker在replace替换是对NULL值的处理
freemarker的对象调用内建函数时,比如userInfo对象的birthDay函数,页面${userInfo.birthDay}调用,当我想将birthDay值中的“-”替换为“/”时,${us ...
- 为什么 char c = 'A';c += 32; 结果输出的是 'a'?
首先 char 类型的数据只要参与运行会先转换为 int 类型数值(在 ASCII 编码表中 'A' 对应十进制的 65),那么 'A' 转换为 int 为 65,65 + 32 = 97,+= 包含 ...
- 个人项目-Wc-Java
一.Github项目地址: https://github.com/Heiofungfming/xiaoming01 二.PSP表格 PSP2.1 任务内容 计划完成需要的时间(min) 实际完成需要的 ...
- IDEA 使用jebel热部署插件启动失败
在使用Jebel热部署插件开发springmvc时,启动会出现内存溢出错误.可在配置Tomcat时增加JVM参数解决. -Xms768m -Xmx768m -XX:PermSize=64M -XX:M ...
- day17—max, map, reduce, filter, zip 函数的使用
一.max 函数 l=[3,2,100,999,213,1111,31121,333] print(max(l)) # dic={'k1':10,'k2':100,'k3':30} print(max ...
- js语法基础入门(3)
3.数据类型 3.1.数据类型学习重点 前面我们通俗的讲了,数据类型其实就是对数据进行了分类,那么,在js中到底把数据分成了几类?这些类的名称叫什么?每个分类下面有那些值?这些问题是需要记清楚的,例如 ...
- socket 建立网络连接,client && server
client代码: package socket; import java.io.IOException; import java.net.Socket; /** * 客户端_聊天室 * * @aut ...