Oracle创建表并设置主键自增

合集下载

oracle自增序列实现可作为主键

oracle自增序列实现可作为主键

VALUE VARCHAR2(100),
CREATETIME DATE,
USERMNAME VARCHAR2(20)
)
RID 是我要建自增序列字段
第一步:
建立一个序列:
-- Create sequence create sequence SQE_TAB_USERINPUT minvalue 1 maxvalue 99999999999999999999999999--不要超过序列的位数 start with 21 increment by 1 cache 20;
网络错误503请刷新页面重试持续报错请尝试更换浏览器或网络环境
好记性不如烂笔头 记录如实 现 可 作 为 主 键
表结构
create table TAB_USERINPUT
(
RID
VARCHAR2(20) not null,
VARID VARCHAR2(20),
到此,自增序列就建好了
第二步:
把序列与表的字段关联 (oracle 的序列作用空间是数据库 所以一个序列可以与多个表关联,但是他们使用同一个数据)
create or replace trigger TR_TAB_userinput before insert on TAB_USERINPUT -- 这里最好使用before for each row -begin select SQE_TAB_USERINPUT.nextval into:new.rID from dual; end;

Oracle自动增长列的设置

Oracle自动增长列的设置

SQL SERVER 和ACCESS 以及MYSQL 中,都有一种自增字段,通常被用来做主键或索引键,但是ORACLE 中,确并没有提供这种功能,但我们确经常需要这个功能,可以用以下方法解决,一,如果你不在集群环境下使用,并且用到了hibernate,那么可以用hibernate提供的产生自动增长类型主键的increment策略,如下在**.hbm.xml(hibernate映射文件)中配置如下<class name="com.xx.xx.Test" table="TEST"><id name="id" type="int" column="ID">//该句指定使用hibernate自带的increment策略生成主键<generator class="increment"/></id><property name="uname" type="ng.String" column="UNAME"/></class>这样,在java文件中对表增加记录时,只需添加除ID外的其他字段,然后save即可,注意,increment 实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键,increment不能在集群环境下使用,二,使用hibernate的sequence策略,在oracle中新建一个sequence,在hibernate中使用,如下在**.hbm.xml(hibernate映射文件)中配置如下<class name="com.xx.xx.Test" table="TEST"><id name="id" type="int" column="ID">//该句指定使用hibernate自带的sequence策略生成主键,TEST_SEQ是在数据库中新建的sequence的名称<generator class="sequence"><param name="sequence">TEST_SEQ</param></generator><property name="uname" type="ng.String" column="UNAME"/></class>这样,在java文件中对表增加记录时,只需添加除ID外的其他字段,然后save即可,三,以上两种方法都是通过hibernate实现的,下面给出ORACLE的一种实现方式1. 建立SEQUENCECREATE [ OR REPLACE ] SEQUENCE sequence_identity START WITH initial seedINCREMENT BY step MAXVALUE upper bound [NOMAXVALUE] NOCYCLE [empty] 2. 建立TRIGGERCREATE [ OR REPLACE ] TRIGGER trigger_identity BEFORE INSERT ON table_name FOR EACH ROW BEGIN SELECT sequence_identity.NEXTVALINTO :new.column_name FROM DUAL; END;这样,在java文件中对表增加记录时,只需添加除ID外的其他字段,然后save即可,。

oracle数据库创建表且主键自增

oracle数据库创建表且主键自增

oracle数据库创建表且主键⾃增唠叨⼏句:⼏年前的知识忘却了,整理⼀下笔记,提供⼀下⽅便1、创建数据库表设置主键create table users( userid number(10) primary key, /*主键,⾃动增加*/ username varchar2(20));附删除表:drop table users;2、创建序列⾃增CREATE SEQUENCE user_Sequence INCREMENT BY 1 -- 每次加⼏个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最⼤值 NOCYCLE -- ⼀直累加,不循环 CACHE 100;附删除序列: DROP SEQUENCE user_Sequence创建好序列之后,就⼿动可以添加数据了,可以多执⾏⼏次insert into users(userid ,username ) values(user_Sequence.nextval,'范伟');查询表数据看看效果select userid ,username from users3、那么问题来了,在oracle客户端这样操作是可以的。

关键是怎么融⼊到实际开发中呢?创建触发器试试!!create or replace trigger users_trigger --users_trigger 触发器名称before insert on users --users是表名for each rowdeclarenextid number;beginIF :erid IS NULL or :erid=0 THEN --userid是列名select user_Sequence.nextval --user_Sequence 正是刚才创建的序列into nextidfrom sys.dual;:erid:=nextid;end if;end users_trigger ; --users_trigger 触发器名称附删除触发器:drop trigger users_trigger;再次插⼊数据试试效果吧insert into users(username ) values('本⼭');。

oracle主键自动增长序列

oracle主键自动增长序列

select * from(select e.*,ROWNUM rnfrom (select * from emp order by empno) e)where rn between 1 and 10;select * from(select e.*,ROWNUM rnfrom (select * from emp order by empno) ewhere ROWNUM<=10)where rn>=1;首先,你要有一张表!CREA TE TABLE example(ID Number(4) NOT NULL PRIMARY KEY,NAME V ARCHAR(25),PHONE V ARCHAR(10),ADDRESS V ARCHAR(50));然后,你需要一个自定义的sequenceCREA TE SEQUENCE emp_sequenceINCREMENT BY 1 -- 每次加几个START WITH 1 -- 从1开始计数NOMAXV ALUE -- 不设置最大值NOCYCLE -- 一直累加,不循环NOCACHE -- 不建缓冲区以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,假如你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下假如你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但假如遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(假如连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:CREA TE TRIGGER "触发器名称" BEFOREINSERT ON example FOR EACH ROW WHEN (new.id is null)beginselect emp_sequence.nextval into: new.id from dual;end;打完收工!下面你就试试插入数据吧!INSERT INTO example(Name,phone,address) V alues('Cao','56498543','Heibei');=============================================================ORACLE SEQUENCE的简单介绍(自增长字段)- -from:/BBS/user_file/2002-04-10/1018438701.htm在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。

oracle建表、建主键、外键基本语法

oracle建表、建主键、外键基本语法
是个温柔是大法官的法律和融合安抚更好体验和oracleredolog日志格式的详细分析文档logminer源代码下载dulasm工具源代码下载尽在tomcoding网站全部是or
oracle建 表 、 建 主 键 、 外 键 基 本 语 法
oracle建 表 、 建 主 键 、 外 键 基 本 语 法
-创建表格语法: create table 表名( 字段名1 字段类型(长度) 是否为空, 字段名2 字段类型 是否为空
);
-增加主键 alter table 表名 add constraint 主键名 primary key (字段名1);
-增加外键: alter table 表名 add constraint 外键名 foreign key (字段名1) references 关联表 (字段名2);
EXAM_SCORE
number(5,2),
EXAM_DATE
date,
AUTOID
number(10)
not null,
STU_ID
char(5),
SUB_ID
char(3),

constraint PK_T_SCORE primary key (AUTOID),
constraint FK_T_SCORE_REFE foreign key (STU_ID)
references T_STU (STU_ID)
)
在建立表格时就指定主键和外键
create table T_STU (
STU_ID
char(5)
not null,
STU_NAME
varchar2(8)
not null,
constraint PK_T_STU primary key (STU_ID)

使用powerdesigner创建oracle数据库表,设置表主键列为自动增长

使用powerdesigner创建oracle数据库表,设置表主键列为自动增长

使用powerdesigner创建oracle数据库表,设置表主键列为自动增长powerdesigner 版本12.5创建表就不说了。

下面开始介绍设置自动增长列。

1 在表视图的列上创建。

双击表视图,打开table properties ———>columens ,双击要设置的列(显示列的序号的那个按钮,单击后,会显示横向的黑色箭头)。

打开column properties 对话框。

在‘general’ 项中,最下面,找到sequence,下拉框后面,有三个按钮就‘create’,‘select’,‘properties’。

新建的话就点击‘create' 打开sequence properties 对话框,general 中的name,code 随意修改切换到physical options 项,输入下面几项内容start with 1increment by 1minvalue 1maxvalue 根据自己需要决定是否要设定。

没有的话,选择no max valueno cache 勾选输入完后,点击应用。

创建完毕。

在preview 中可以看到相应的创建代码同时,在table properties———>preview 的创建代码中,自动加入了触发器trigger 的创建代码。

创建完成。

使用:到table properties———>preview 中拷贝table 的创建代码,赋值到plsql中执行。

提示:不知道是我的powerdesigner 设置问题还是怎么回事,table 的创建代码中没有自动加入sequence 的创建部分。

所以,还要到sequence properties ———>preview 中,把sequence的创建代码拷贝到表创建的代码中放到cteate table .... 和create trigger ...中间例如:create table G_EC_LotteryCategory (lcId NUMBER(3) not null,lcName NVARCHAR2(30),lcAbbr NVARCHAR2(20),constraint PK_G_EC_LOTTERYCATEGORY primary key (lcId))/create sequence Sequence_LotCateIDincrement by 1start with 1nomaxvalueminvalue 1nocache;create trigger tib_g_ec_lotterycategory before inserton G_EC_LotteryCategory for each rowdeclareintegrity_error exception;errno integer;errmsg char(200);dummy integer;found boolean;begin-- Column lcId uses sequence Sequence_LotCateIDselect Sequence_LotCateID.NEXTVAL INTO :new.lcId from dual;-- Errors handlingexceptionwhen integrity_error thenraise_application_error(errno, errmsg);end;/在plsql 中执行上端代码。

简单三步轻松实现ORACLE字段自增

简单三步轻松实现ORACLE字段自增

简单三步轻松实现ORACLE字段⾃增第⼀步:创建⼀个表。

复制代码代码如下:create table Test_Table(ID number(11) primary key,Name varchar(50) not null,Value1 varchar(50) not null)第⼆步:创建⼀个⾃增序列以此提供调⽤函数。

复制代码代码如下:create sequence AutoIDstart with 1 //根据需要⾃⼰可修改该数值increment by 1 //步长值minvalue 1nomaxvalue其实到此步骤,已经可以实现字段⾃增了。

新增记录时看如下代码:复制代码代码如下:Insert into Test_Table(ID,Name,Value1)values(AutoID.nextval,'xiyang','blog')第三步:我们通过创建⼀个触发器,使调⽤的⽅式更加简单。

复制代码代码如下:create trigger AutoID_Triggerbefore insert on Test_Table for each rowbeginselect AutoID.nextval into :new.ID from dual;end AutoID_Trigger;该触发器在数据库注册了表格的侦听,即当指定表Test_Table插⼊记录之前,我们调⽤⼀个序列⽅法的nextval获得新值,插⼊⾃增字段。

在触发器中,我们调⽤了系统虚拟表dual,该表作为系统表的⼀部分,它内部只存储⼀条记录,我们可以通过该表获取与系统相关的⼀些信息或者进⾏⼀些简单的逻辑操作。

在该触发器中,我们使⽤了dual的⼀个经典⽤法,即获取定义序列的nextval⽅法。

通过上⾯三个步骤,我们就实现了⼀个表的字段⾃增,做插⼊操作时执⾏以下代码即可:Insert into Test_Table(Name,Value1) values('xiyang','blog')通过在数据库中查询结果集,会发现ID列是⾃增的。

oracle中如何设置自增主键

oracle中如何设置自增主键

首先,你要有一张表!CREATE TABLE example(ID Number(4) NOT NULL PRIMARY KEY,NAME V ARCHAR(25),PHONE V ARCHAR(10),ADDRESS V ARCHAR(50));如果对于以上的建表语句还有疑问的话,建议您不要继续了!有那么些时间您还不如去看看金庸读读琼瑶!然后,你需要一个自定义的sequenceCREATE SEQUENCE emp_sequenceINCREMENT BY 1 -- 每次加几个START WITH 1 -- 从1开始计数NOMAXV ALUE -- 不设置最大值NOCYCLE -- 一直累加,不循环NOCACHE -- 不建缓冲区以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:CREATE TRIGGER "触发器名称" BEFOREINSERT ON example FOR EACH ROW WHEN (new.id is null)beginselect emp_sequence.nextval into: new.id from dual;end;打完收工!下面你就试试插入数据吧!INSERT INTO example(Name,phone,address) Values(''Cao'',''56498543'',''Heibei'');=============================================================ORACLE SEQUENCE的简单介绍(自增长字段)- -在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。

Oracle创建表并设置主键自增

Oracle创建表并设置主键自增

Oracle数据库如何创建表并设置主键自增
首先我们使用oracle sql developer官方管理工具来新建表并色织主键自增,首先连接数据库想必不用多说。

创建表
在表那个文件夹上右键选择新建表
弹出如下图所示:
输入你想要的表名和列名并设置数据类型主键一定要设置NUMBER类型
设置主键
只要在主键那一行单件一下最前面的小方块就行,产生如何所示的效果即可:
主键的标识就是那个小钥匙。

设置主键自增
下面我们设置主键自增,选中主键所在那一行,找到下面的身份列单击(如图所示):
如下图所示看到类型点击下拉菜单选择列序列:
此时系统自动生成触发器和序列不用做任何修改点击确定那个么一个主键自增的表就已经成功的生成了。

测试
下面我们测试一下数据插入是否成功,这里我们直插入name列不插入主键看看主键是否能够自增。

Select一下发现主键确实自动生成并且自增了,如果不放心可以多加几条测试数据,这里我就不多加描述了。

oracle主键自增,触发器

oracle主键自增,触发器

create or replace trigger trig_emp_view_update --定义触发器的名字
after update of sal on emp_view --定义修改触发器,在执行完后触发。
for each row --每次操作都会引起触发
rollback;
--验证触发器
update emp_view set sal = 900 where empno = 7369; --验证修改一条
update emp_view set sal = 1000 where empno in (7369,7900); --验证修改多条记录
----2、增加触发器
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL CURRVAL=返回sequence的当前值 NEXTVAL=增加sequence的值,
然后返回sequence值
第二步写触发器
create or replace trigger zuocheng_id
select * from student; ---有成绩的字段 studentid,studentname ,score
delete from student where studentid=5;
commit;
create or replace trigger trig_student
after insert on student
when (new.sal > old.sal)
declare num number(7,2);
begin
num := :new.sal - :old.sal;

oracle数据库自增id表的insert语句写法

oracle数据库自增id表的insert语句写法

在 Oracle 数据库中,没有像 MySQL 或 PostgreSQL 中的自增列(auto-increment)
那样的直接语法。

在 Oracle 中,常用的方式是通过序列(Sequence)和触发器(Trigger)来模拟自增列的功能。

以下是创建包含自增 ID 的表以及插入数据的基本步骤:
1.创建序列(Sequence):
这个序列将从 1 开始,每次递增 1,不使用缓存。

2.创建表并使用序列默认值:
在表的创建语句中,我们使用了DEFAULT your_sequence.NEXTVAL,这表示在插
入数据时,如果不提供id列的值,系统将使用序列的下一个值作为默认值。

3.插入数据:
在插入数据时,你只需要提供表中的其他列的值,而不需要提供id列的值。

Oracle 将自动使用序列的下一个值作为id的值。

注意:
▪如果你有多个表需要使用相同的序列,可以在表的创建语句中直接使用your_sequence.NEXTVAL,而不是在每个表中都创建一个独立的序列。

▪使用序列和触发器的方法可以实现自增 ID 的功能,但可能不如某些数据库系统的直接自增列实现那么直观和简单。

oracle数据库创建表且主键自增

oracle数据库创建表且主键自增

oracle数据库创建表且主键⾃增Oracle数据库中,设置ID⾃增并不像MySQL中那么简单,Oracle中需要设置⼀个序列。

现在给出⽅式,具体如下:第⼀步:建⽴⼀个表create table ContestDB(TID NUMBER(10) PRIMARY KEY,TEAMNUM varchar(50) not null,MARKNUM varchar(50));第⼆步:设置ID⾃增第⼀种⽅式:不使⽤触发器1 CREATE SEQUENCE SEQ_TID;2 INSERT INTO ContestDB VALUES(SEQ_TID.NEXTVAL,'B20007009','B001 ');3 INSERT INTO ContestDB VALUES(SEQ_TID.NEXTVAL,'B20007010','B003 ');第⼆种⽅式:使⽤Trigger 触发器1 --⾃定义⼀个序列2 create sequence ContestDB_sequence3 increment by 1 --每次增加⼏个,我这⾥是每次增加14 start with 1 --从1开始计数5 nomaxvalue --不设置最⼤值6 nocycle --⼀直累加,不循环7 nocache --不建缓冲区8 --创建⼀个触发器9 CREATE TRIGGER ContestDB_trigger10 BEFORE INSERT ON ContestDB11 FOR EACH ROW12 WHEN (new.TID is null) --只有在tid为空时,启动该触发器⽣成tid号13 begin14 select ContestDB_sequence.nextval into :new.TID from sys.dual;15 end;1617 insert into ContestDB(TEAMNUM,MARKNUM) values('A20007013','A002');1819 insert into ContestDB(TEAMNUM,MARKNUM) values('A20007014','A003');。

在oracle中创建自动增长字段

在oracle中创建自动增长字段
五、结果截图
二、创建员工表自动增长序列 create sequence employee_autoinc minvalue 1 maxvalue 9999999999999999999999999999 start with 1 increment by 1 nocache;
三、创建触发器将序列中的值赋给插入employee表的行 create or replace trigger insert_employee_autoinc before insert on employee for each row begin select employee_autoinc.nextval into :new.Id from dual; end insert_employee_autoinc; /
四、验证 insert into employee(DeptNo,EmpNo,Ename,job,sal,hiredate) values(520,5201002,'James zhou','PD',6000,to_date('2012-10-22','yyyy-mm-dd')); insert into employee(DeptNo,EmpNo,Ename,job,sal,hiredate) values(521,5211314,'xc','Boss',90000,sysdate);
oracle在创建表时和其他的数据库有点不一样mysql中可以使用autoincrement即可
在 oracle中创建自动增长字段
oracle在创建表时和其他的数据库有点不一样,MySql中可以使用“auto_increment”即可。但是oracle有点麻烦,需要使用序列和触发器达到目的。

oracle中如何指定表字段自增

oracle中如何指定表字段自增

oracle中如何指定表字段⾃增背景介绍:SQL SERVER可以在int类型的字段后加上identity(1,1),该字段就会从1开始,按照+1的⽅式⾃增,将这个字段设置为主键,有利于我们进⾏数据的插⼊操作。

MySql中可以使⽤“auto_increment”即可。

但是oracle有点⿇烦,需要使⽤序列和触发器达到⽬的。

--学校表create table school(sid number(4),sname varchar2(400 char), check_status number(1) default 0 check( check_status in(0,1)),accountant varchar2(20 char),pwd varchar2(20 char),email varchar2(30 char),photo_path varchar2(800 char),constraint pk_t_school primary key(sid));-- 序列(序列与触发器实现school表中sid字段的⾃动增长)create sequence shool_sid_autoincminvalue 1maxvalue 9999999999999999999999999999start with 1increment by 1nocache;--触发器(序列与触发器实现school表中sid字段的⾃动增长)create or replace trigger insert_shool_sid_autoincbefore insert on schoolfor each rowbeginselect shool_sid_autoinc.nextval into :new.sid from dual;end;/-- 测试结果SQL> insert into school values(100,'a',0,001,001,'964955634@',66666);1 row created.SQL> insert into school values(100,'aaaaaaaaaaaaaaaaaaaaa',0,001,001,'964955634@',66666);1 row created.SQL> select sid from school;SID----------12Ok,结束。

ORACLE数据库实现自增的两种方式

ORACLE数据库实现自增的两种方式

ORACLE数据库实现⾃增的两种⽅式Mysql数据库因为其有⾃动+1,故⼀般我们不需要花费太多时间,直接⽤关键字auto_increment即可,但是Oracle不⾏,它没有⾃动增长机制。

顾我们需要⾃⼰去实现。

⼀般有两种⽅式,但是这两种⽅式都与序列化有关。

第⼀种⽅式:序列化+触发器;第⼆种⽅式:序列化+显⽰调⽤序列化。

⼀般我选⽤第⼀种⽅式。

因为我们只要建⽴好序列化+触发器,这样我们就需要太多的去关注这个字段了,触发器会在我们插⼊数据时⾃动触发,帮助我们进⾏+1操作。

这正好解决了我最近做的⼀个mini项⽬中的部门删除操作(⼦部门与⽗部门),因为我们知道⽗部门总是先于⼦部门存在于数据库中,如果我们额外建⼀个字段去记录插⼊数据的先后顺序,这样我们在做删除时,只要让⼦部门先于⽗部门删除,这样就不会存在因为批量删除部门,因删除⽗部门递归删除⼦部门,再删⼦部门时发现没有⼦部门的存在了⽽报异常。

好了案例说完了。

现在来在oracle数据库中具体实现⾃增1的操作。

准备⼯作建表://准备⼯作创建⼀张表create table dept_p(dept_id VARCHAR2(40) not null,dept_name VARCHAR2(40),parent_id VARCHAR2(40),state NUMBER(11),dept_sort NUMBER(11));alter table DEPT_P add [constraint dept_id] primary key(dept_id);⽅式⼀:序列化+触发器第⼀步:创建序列sequencecreate sequence seq_t_deptminvalue 1maxvalue 99999999start with 1increment by 1cache 50第⼆步:建⽴触发器create or replace trigger "dept_trig"before insert on dept_preferencing old as old new as new for each rowdeclarebeginselect seq_t_dept.nextval into :new.dept_sort from dual;end dept_trig;第三步:插⼊数据测试看dept_sort是否⾃增insert into dept_p values('001', '安保部', '000', 1);select * from dept_p;⽅式⼆:序列化+显⽰调⽤第⼀步:创建序列sequence//创建sequencecreate sequence seq_on_deptincrement by 1start with 1nomaxvaluenocyclenocache;第⼆步:显⽰调⽤序列insert into dept_p values('001', '安保部', '000', 1, seq_on_test.nextval);第三步:查询进⾏查看 select * from dept_p注://查看序列当前值和下⼀个值的查看⽅式select seq_on_dept.currval from dual;select seq_on_dept.nextval from dual;总结:create sequence 序列名[increment by n][start with n][{maxvalue/minvalue n | nomaxvalue}] [{cycle|nocycle}][{cache n | nocache}];。

实现oracle数据库字段自增长(两种方式)

实现oracle数据库字段自增长(两种方式)

实现oracle数据库字段⾃增长(两种⽅式)程序猿都知道mysql等其他的数据库都有随着记录的插⼊⽽表ID会⾃动增长的功能,反⽽oracle却没有这⼀功能,下⾯通过两种⽅式来解决字段增长的功能,具体内容情况下⽂。

因为两种⽅式都需要通过创建序列来实现,这⾥先给出序列的创建⽅式。

复制代码代码如下:CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n][{MAXVALUE/ MINVALUE n|NOMAXVALUE}][{CYCLE|NOCYCLE}][{CACHE n|NOCACHE}];解析:1)INCREMENT BY⽤于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。

2)START WITH 定义序列的初始值(即产⽣的第⼀个值),默认为1。

3)MAXVALUE 定义序列⽣成器能产⽣的最⼤值。

选项NOMAXVALUE是默认选项,代表没有最⼤值定义,这时对于递增Oracle序列,系统能够产⽣的最⼤值是10的27次⽅;对于递减序列,最⼤值是-1。

4)MINVALUE定义序列⽣成器能产⽣的最⼩值。

选项NOMAXVALUE是默认选项,代表没有最⼩值定义,这时对于递减序列,系统能够产⽣的最⼩值是?10的26次⽅;对于递增序列,最⼩值是1。

5)CYCLE和NOCYCLE 表⽰当序列⽣成器的值达到限制值后是否循环。

CYCLE代表循环,NOCYCLE代表不循环。

如果循环,则当递增序列达到最⼤值时,循环到最⼩值;对于递减序列达到最⼩值时,循环到最⼤值。

如果不循环,达到限制值后,继续产⽣新值就会发⽣错误。

6)CACHE(缓冲)定义存放序列的内存块的⼤⼩,默认为20。

NOCACHE表⽰不对序列进⾏内存缓冲。

对序列进⾏内存缓冲,可以改善序列的性能。

解决⽅式⼀、序列+触发器具体实现⽅式如下:第⼀步,创建sequence复制代码代码如下:-- Create sequencecreate sequence SEQ_T_RECVminvalue 1maxvalue 9999999start with 1increment by 1cache 50;第⼆步,创建表复制代码代码如下:-- Create tablecreate table RECV_MSG(id NUMBER,messageid VARCHAR2(32),contents VARCHAR2(2000),app_flg VARCHAR2(100),phonenumber VARCHAR2(2000),updatetime DATE default sysdate);第三步,建⽴触发器复制代码代码如下:CREATE OR REPLACE TRIGGER "recv_trig"BEFORE INSERT ON recv_msgREFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLAREBEGINSELECT SEQ_T_RECV.NEXTVAL INTO :NEW.ID FROM DUAL; END recv_trig;第四步,测试并确认向表中插⼊⼀条数据,查看id字段是否⾃动增长了。

在oracle中创建自动增长字段

在oracle中创建自动增长字段

在oracle中创建⾃动增长字段oracle在创建表时和其他的数据库有点不⼀样,如SQL SERVER可以在int类型的字段后加上identity(1,1),该字段就会从1开始,按照+1的⽅式⾃增,将这个字段设置为主键,有利于我们进⾏数据的插⼊操作。

MySql中可以使⽤“auto_increment”即可。

但是oracle有点⿇烦,需要使⽤序列和触发器达到⽬的。

⾸先我们创建⼀个员⼯表。

create table employee(Id int ,DeptNo number,EmpNo number,Ename varchar2(16),Job varchar2(32),Sal float,HireDate date,constraint pk_employee primary key(EmpNo));第⼆,创建员⼯表⾃动增长序列create sequence employ_autoincminvalue 1maxvalue 9999999999999999999999999999start with 1increment by 1nocache;第三,创建触发器将序列中的值赋给插⼊employee表的⾏create or replace tirgger insert_employee_autoincbefore insert on employeefor each rowbeginselect employ_autoinc.nextval into :new.Id from dual;end insert_employee_autoinc最后测试⼀下我们的成果insert into employee(DeptNo,EmpNo,Ename,job,sal,hiredate) values(520,5201002,'Jameszhou','PD',6000,to_date('2012-10-22','yyyy-mm-dd'));select * from employee;oracle在创建表时和其他的数据库有点不⼀样,如SQL SERVER可以在int类型的字段后加上identity(1,1),该字段就会从1开始,按照+1的⽅式⾃增,将这个字段设置为主键,有利于我们进⾏数据的插⼊操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle数据库如何创建表并设置主键自增
首先我们使用oracle sql developer官方管理工具来新建表并色织主键自增,首先连接数据库想必不用多说。

创建表
在表那个文件夹上右键选择新建表
弹出如下图所示:
输入你想要的表名和列名并设置数据类型主键一定要设置NUMBER类型
设置主键
只要在主键那一行单件一下最前面的小方块就行,产生如何所示的效果即可:
主键的标识就是那个小钥匙。

设置主键自增
下面我们设置主键自增,选中主键所在那一行,找到下面的身份列单击(如图所示):
如下图所示看到类型点击下拉菜单选择列序列:
此时系统自动生成触发器和序列不用做任何修改点击确定那个么一个主键自增的表就已经成功的生成了。

测试
下面我们测试一下数据插入是否成功,这里我们直插入name列不插入主键看看主键是否能够自增。

Select一下发现主键确实自动生成并且自增了,如果不放心可以多加几条测试数据,这里我就不多加描述了。

相关文档
最新文档