oracle怎么实现oracle数据库id自增长长

CREATE TABLESPACE shopping
DATAFILE 'D:\oracle\mypc\oradata\orcl\shopping.dbf' SIZE 20M
AUTOEXTEND ON ;
create user shopping --创建 用户 用户名
identified by shopping --密码 密码字符
default tablespace shopping --默认表空间 表空间名
temporary --临时表空间 表空间名
-- 赋予权限
grant connect to shoppi
grant DBA to shoppi
使用sql plus登陆管理员帐户,给shopping用户授DBA权限
以下为设置ID自动增长步骤:
3、建触发器
插入自动增长ID
INSERT INTO TABLE_NAME(ID)VALUES(SEQ_ID.NEXTVAL);
注意点:后来我又遇到个问题,因为我的那个表中有字段数据是空,实际表字段设计的是不可为空,我是用insert请句插入的数据&NULL&,所以在插入自动增长ID的时候报错:
修改表字段勾选 可为空,除非ID外,其它字段都可为空,如果不为空,那么字段数据里面要确实不是NULL才可以
阅读(...) 评论()oracle ID如何实现自增?
我的图书馆
oracle ID如何实现自增?
create sequence userlogin_seq increment by 1 start with
maxvalue 9
create or replace trigger userlogin_trigger before insert on T_Base_IMSITreefor each row begin &&&&& select&& userlogin_seq.nextval&& into:new.id from sys.
create table userlogin(
&&&& id&& number(6) not null,
&&&& name&& varchar2(30)&& not null primary key
tablespace users
第一步:创建SEQUENCE
create sequence userlogin_seq increment by 1 start with 1 minvalue 1 maxvalue 9
第二步:创建一个基于该表的before insert 触发器,在触发器中使用刚创建的SEQUENCE
create or replace trigger userlogin_trigger before insert on userloginfor each row begin &&&&& select&& userlogin_seq.nextval&& into:new.id from sys.
第三步:在userlogin表中测试
写个insert语句,插入一条记录,看ID字段自增了没,自增则OK啦。&
oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现。
先建一个测试表了:
create table userlogin(
&&&& id&& number(6) not null,
&&&& name&& varchar2(30)&& not null primary key
tablespace users
第一步:创建SEQUENCE
create sequence userlogin_seq increment by 1 start with 1 minvalue 1 maxvalue
第二步:创建一个基于该表的before insert 触发器,在触发器中使用刚创建的SEQUENCE
create or replace trigger userlogin_trigger before insert on userloginfor each row begin &&&&& select&& userlogin_seq.nextval&& into:new.id from sys.
第三步:在userlogin表中测试
写个insert语句,插入一条记录,看ID字段自增了没,自增则OK啦。&&&
Oracle序列知识:
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10;
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL CURRVAL=返回 sequence的当前值 NEXTVAL=增加sequence的值,然后返回 sequence 值 比如: emp_sequence.CURRVAL emp_sequence.NEXTVAL
可以使用sequence的地方: - 不包含子查询、snapshot、VIEW的 SELECT 语句 - INSERT语句的子查询中 - NSERT语句的VALUES中 - UPDATE 的 SET中
可以看如下例子: INSERT INTO emp VALUES (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);
SELECT empseq.currval FROM DUAL;
但是要注意的是: - 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组 到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
2、Alter Sequence 你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create . Alter sequence 的例子 ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE -- 到10000后从头开始 NOCACHE ;
影响Sequence的初始化参数: SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。
可以很简单的Drop Sequence DROP SEQUENCE order_
发表评论:
TA的推荐TA的最新馆藏Oracle使用序列和触发器实现自增ID_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Oracle使用序列和触发器实现自增ID
上传于||文档简介
&&Oracle使用序列和触发器实现自增
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢Oracle数据库中,两种方式实现ID自增
Oracle数据库中,两种方式实现ID自增
Oracle数据库
Oracle数据库中,设置ID自增并不像MySQL中那么简单,Oracle中需要设置一个序列。
现在给出方式,具体如下:
第一步:建立一个表
create table ContestDB
NUMBER(10) PRIMARY KEY,
TEAMNUM varchar(50)
MARKNUM varchar(50)
第二步:设置ID自增
第一种方式:不使用触发器
CREATE SEQUENCE SEQ_TID;
INSERT INTO ContestDB VALUES(SEQ_TID.NEXTVAL,'B;,'B001 ');
INSERT INTO ContestDB VALUES(SEQ_TID.NEXTVAL,'B;,'B003 ');
第二种方式:使用Trigger 触发器
--自定义一个序列
create sequence ContestDB_sequence
increment by 1 --每次增加几个,我这里是每次增加1
start with 1
--从1开始计数
nomaxvalue
--不设置最大值
--一直累加,不循环
--不建缓冲区
--创建一个触发器
CREATE TRIGGER ContestDB_trigger
BEFORE INSERT ON ContestDB
FOR EACH ROW
WHEN (new.TID is null) --只有在tid为空时,启动该触发器生成tid号
select ContestDB_sequence.nextval into :new.TID from sys.
insert into ContestDB(TEAMNUM,MARKNUM) values('A;,'A002');
insert into ContestDB(TEAMNUM,MARKNUM) values('A;,'A003');
分享知识,分享快乐!若发现错误,望指出,谢谢!
我的热门文章
即使是一小步也想与你分享博客访问: 2299
博文数量: 1
注册时间:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Oracle
创建一个SEQUENCE,通过它来获取自增ID,
CREATE&SEQUENCE&MY_TABLE_SEQ;&--创建了一个SEQUENCE&&
CREATE SEQUENCE MY_TABLE_SEQ; --创建了一个SEQUENCE
插入的时候这样:
INSERT&INTO&MY_TABLE&(ID)&VALUES&(MY_TABLE_SEQ.NEXTVAL);&&
INSERT INTO MY_TABLE (ID) VALUES (MY_TABLE_SEQ.NEXTVAL);
要把当前这个ID返回可以这样:
SELECT&MY_TABLE_SEQ.CURRVAL&FROM&DUAL;&&
SELECT MY_TABLE_SEQ.CURRVAL FROM DUAL;
MY_TABLE_SEQ.CURRVAL 要和 MY_TABLE_SEQ.NEXTVAL配合起来用。
先MY_TABLE_SEQ.NEXTVAL了,才能取MY_TABLE_SEQ.CURRVAL。
-------------------------------------历史的分割线----------------------------------
一、分页显示
与PGsql mysql 使用limit 不同oracle可以使用以下语句进行分页处理:
$query= 'Select * from (Select A.*,RowNum Rn from ('.$query.') A
Where RowNum ='.$
$query:是你需要分页显示的SQL
RowNum:是返回结果集的记录序号
$start $end:是分页的起始序号
二、自增字段:
表atable(id,a) id需要自增 首先建立一个序列:
create sequence seq_atable minvalue 1 maxvalue 999999
start with 1 increment by 1 nocache
有二种方式使用自增字段:
使用序列 触发器实现自增,插入语句不需要管自增字段
如:create or replace trigger trg_atable before insert on atable for
each row begin select seq_atable.nextval into :new.
插入数据:insert into atable(a) values('test');
仅使用序列,需要在插入数据时,自增字段插入序列下一个值
如:insert into atable(id,a) values(seq_atable.nextval,'test');
三、返回刚插入记录的自增字段值
如上面的例子,我们插入一条记录后,我想马上返回刚插入的记录的ID号,我该怎么处理呢?
首先要解决自增字段的问题,上面的二种方法哪种更适合这种用法呢? 建议使用第二种自增序列,否则处理起这个问题来比较麻烦。
使用自增字段的第二种方法,在插入一条记录后马上执行一下下面的语句即返回当前插入数据的ID。
$query="select seq_atable.currval from dual";
seq_atable.currval
的值只有在同一次会话中,发生seq_atable.nextval后有效:)所以不会存在取错值的问题。
~~~~~~~~~~~~~~~~~~~~~~~~
Microsoft SQL Server里获取自增ID
&&insert into PRODUCT
(PRD_DESCRIPTION) values (#description#)
&&SELECT @@IDENTITY AS
阅读(1872) | 评论(0) | 转发(0) |
上一篇:没有了
下一篇:没有了
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 oracle数据库id自增长 的文章

 

随机推荐