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 sequence
create sequence SEQ_T_RECV
minvalue 1
maxvalue 9999999
start with 1
increment by 1
cache 50;

第二步,创建表

-- Create table
create 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_msg
  REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
BEGIN
  SELECT SEQ_T_RECV.NEXTVAL INTO :NEW.ID FROM DUAL;
END recv_trig;

第四步,测试并确认
向表中插入一条数据,查看id字段是否自动增长了。

解决方式二、序列+显示调用序列

一、创建sequence

create sequence seq_on_test
increment by 1
start with 1
nomaxvalue
nocycle
nocache; 

二、建表

--建表
drop table test;
create table test(
ID integer
,stu_name nvarchar2(4)
,stu_age number
); 

三、插入数据(显示调用序列的下一个值插入)

--插入数据
insert into test values(seq_on_test.nextval,‘Mary‘,15);
insert into test values(seq_on_test.nextval,‘Tom‘,16); 

四、查看

select * from test; 

--结果
/*
1 Mary 15
2 Tom 16
*/ 

附带:查看序列当前值和下一个值的查看方式

--seq的两个方法
select seq_on_test.currval from dual;
select seq_on_test.nextval from dual; 

--结果
/*
2
3
*/ 

总结

  通过触发器直接添加的方式比显示调用方便一下,我们不需要哪个字段要通过哪个序列还获取下一个值,而通过触发器进行执行的添加。

时间: 2024-11-05 13:18:38

oracle 创建字段自增长——两种实现方式汇总的相关文章

oracle删除表数据的两种的方式

转自:https://blog.csdn.net/qq_37840993/article/details/82490787 平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种方式: 在oracle中,truncate.delete都可以删除表数据,具体的区别以及sql语法如下: truncate table [表名]; delete from [表名]; delete与truncate的区别:delete:会产生rollback,如果删除大数据量的表速度会很慢,而且同时

Oracle 修改字段顺序的两种方法

分类: Oracle 如果要修改字段顺序,一般情况可以使用以下步骤: --(1)备份目标表数据 create table 临时表 as select * from 目标表; --(2)drop 目标表 drop table 目标表; --(3)再重新按照要求的字段顺序建表; create table 临时表 (col1,................coln); --(4)之后用select将数据从临时表导回. 此外,还可以通过修改sys的数据字典来实现.以下是自己的亲身测试记录 --第1步

git使用ssh密钥和https两种认证方式汇总(转)

在版本库的SSH方式和HTTPS方式是不同的,具体来说就是url信息的不同,但是,实际的认证机制也是不同的.当建立了本机密钥之后,使用ssh方式实际上是不需要再次认证的,而https则每次需要输入密码 .<Help.GitHub - SSH key passphrases>里也说了用SSH更方便更安全,不需要去输入长长的密码. 我去看了下repo目录下的.git/config,果然,我的url是HTTPS形式. 1 2 3 [remote "origin"] fetch =

自动创建文件夹的两种方法

自动创建文件夹的两种方法 1.CreateDictionary() CreateDirectory(myPath, 0); //在临时文件夹中创建本应用的文件夹 原型为:BOOL WINAPI CreateDirectory(__in  LPCTSTR lpPathName, __in LPSECURITY_ATTRIBUTES lpSecurityAttributes); 其中lpPathName是要创建的目录的路径,第2个涉及安全性问题 传NULL就好了 例如: char path[MAX_

oracle rename数据文件的两种方法

oracle rename数据文件的两种方法 2012-12-11 20:44 10925人阅读 评论(0) 收藏 举报  分类: oracle(98)  版权声明:本文为博主原创文章,未经博主允许不得转载. 第一种 alter tablespace users rename datafile '==' to '***'; 这种方式需要数据库处于open状态,表空间在offline的状态下才能更改. [sql] view plain copy SQL> alter tablespace user

使用express创建node服务器的两种方法及区别

使用express创建node服务器有两种方法,如下所示: 方法一: var express = require('express'); var app = express(); app.listen('3000', function () { console.log("The server is running at *: 3000"); }); 这是我们常用的一种创建node服务器的方式. 写vue项目时使用的vue-cli脚手架使用的就是这种创建方式.  方法二: var exp

iOS中创建单例的两种方式

刚刚开始做iOS开发的时候,不知道怎么创建单例,在网上搜的也大多数都不太全,所以总结了一下创建单例的两种方式 首先在.h文件中声明类方法 1 +(instancetype)sharedUtils; 然后在.m文件中实现它,实现的方法有两种 第一种,在创建一个对象时先判断在程序中有没有创建过这个对象 1 static PublicUtils *DefaultManager = nil; 2 3 +(instancetype)sharedUtils 4 { 5 if (!DefaultManager

Oracle数据库服务器的两种连接方式

oracle提供了两种数据库连接方式,一种是专有连接方式,另一种是共享连接方式.区别在于专有连接方式是一个用户对应一个数据库服务器进程,而共享服务器连接方式是多个用户可以不定向轮流使用一个服务器进程.oracle推荐专有连接,一个session对应一个服务器进程,会减少竞争,对于较长事务很有用,但是会耗费PGA资源;共享连接方式对于事务执行时间短且服务器资源受限的系统是有利的.对于该使用哪种连接方式,自己权衡. 我们可以通过dbca设置数据库的连接方式: 当然我们也可以通过修改参数shared_

Java中String的两种赋值方式的区别

本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过"字面量"赋值,如:String str="hello",第二种是通过new关键字创建新对象,如:String str=new String("hello").那么这两种赋值的方式到底有什么区别呢,下面给出具体分析. 1.首先回顾Java虚拟机的结构图. 在上面的