`

Oracle自增标识列

    博客分类:
  • Java
阅读更多

 1.基本语法


(1) 创建序列命

CREATE SEQUENCE  SE_NAME   
    [INCREMENT BY n]   
    [START WITH n]   
    [maxvalue n | nomaxvalue]   
    [minvalue n | nominvalue]   
    [CYCLE|NOCYCLE]   
    [CACHE|NOCACHE]   
    [ORDER|NOORDER]; 

 

INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE:指定序列可生成的最大值。
NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
MINVALUE:指定序列的最小值。
NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
CYCLE:循环使用,用大最大值再返。

CACHE:指定cache的值。如果指定CACHE值,Oracle就可以预先在内存里面放置一些Sequence,这样存取的快些。Cache里面的取完后,Oracle自动再取一组到Cache。使用Cache或许会跳号, 比如数据库突然不正常Down掉(Shutdown Abort),Sache中的Sequence就会丢失. 所以可以在Create Sequence的时候用NOCACHE防止这种情况。
ORDER:顺序使用序列值。

(2) 更改序列

ALTER SEQUENCE sequence_name   
[INCREMENT BY n]   
[MAXVALUE n| NOMAXVALUE ]   
[MINVALUE n | NOMINVALUE]   
[CYCLE|NOCYCLE]   
[CACHE|NOCACHE]   
[ORDER|NOORDER];

 

(3) 删除序列

 

DROP SEQUENCE [user.]sequence_name; 

 

2. 序列的使用


序列提供两个方法,NextVal和CurrVal。
NextVal:取序列的下一个值,一次NEXTVAL会增加一次sequence的值。
CurrVal:取序列的当前值。

但是要注意的是:第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。

下面我们来开始使用序列和触发器创建Oracle自增标识列!

新建表   ADMIN 

字段:AID、用户:ANAME、密码:APASSWORD 执行语句

// 第一步:创建表

CREATE TABLE ADMIN   
(    
    AID  NUMBER NOT NULL,    
    ANAME  CHAR(10) NOT NULL,    
    APASSWORD  VARCHAR2(50),    
);  

 

// 第二步:创建自动增长序列

CREATE SEQUENCE SE_ADMIN   
INCREMENT BY 1       
START WITH 1  
NOMINVALUE           
NOMAXVALUE            
NOCYCLE    
NOCACHE   
NOORDER;  

 

// 第三步:创建触发器 

CREATE TRIGGER TR_ADMIN_AID BEFORE    
INSERT ON  ADMIN FOR EACH ROW    
BEGIN    
SELECT SE_ADMIN.NEXTVAL INTO:NEW.AID FROM DUAL;    
END;  

 // 第四步:提交

 

COMMIT;

 // 第六步:验证数据是否插入成功 

 

select * from ADMIN; 

   

 

分享到:
评论

相关推荐

    Oracle中主键自增实例

    在Oracle数据库系统中,主键(Primary Key)是表中的一个或一组字段,它们的值在整张表中是唯一的,用于唯一标识每一条记录。然而,与MySQL等其他数据库不同,Oracle并没有内置的自动递增(auto-increment)功能来...

    oracle设定自增长列

    在Oracle数据库中,实现自增长列的功能是一种常见的需求,尤其在设计主键或者唯一标识符时。这通常用于确保每条记录都有一个唯一的、连续的编号。在给定的文件中,通过创建表、序列和触发器的方式实现了这一功能。...

    Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例

    在这里,我们定义了一个名为id的列,用于存储自增的唯一标识。 3. **创建触发器(Trigger)** 触发器是一种数据库对象,当满足特定条件时,如在插入、更新或删除操作前或后自动执行。在这里,我们需要创建一个`...

    oracle 触发器方式实现行ID自增加

    在Oracle数据库系统中,行ID(也称为序列号或序列)是用于唯一标识表中每一行的关键元素。当需要自动为新插入的行生成唯一的ID时,触发器是一种常用的技术手段。本文将深入探讨如何使用Oracle触发器来实现行ID的自...

    mysql-oracle数据同步

    2. 在Oracle中创建与MySQL主键类型匹配的列和序列。 3. 编写脚本或程序,读取MySQL数据,根据MySQL的主键值生成Oracle的序列号。 4. 插入数据到Oracle,并确保主键值的连续性。 总的来说,MySQL到Oracle的数据同步...

    oracle和db2的区别

    - 这里`ROWNUM`是一个伪列,用于标识查询结果中的行序号。 - **DB2**: - 使用`SELECT * FROM TableName FETCH FIRST N ROWS ONLY;` - `FETCH FIRST N ROWS ONLY`是一个明确且直观的方法来限制返回的行数。 ####...

    oracle自带建表命令

    8. **自增序列**:Oracle不直接支持自增字段,但可以通过序列(SEQUENCE)和触发器(TRIGGER)实现类似功能。序列创建: ``` CREATE SEQUENCE seq_StudentID START WITH 1 INCREMENT BY 1; ``` 9. **索引**...

    oracle快速学习手册

    约束条件可以确保数据的完整性和一致性,如NOT NULL约束防止插入空值,PRIMARY KEY约束定义唯一标识列。 二、CREATE SEQUENCE语句 CREATE SEQUENCE语句用于创建一个序列,它可以生成唯一的递增或递减的数值,常用于...

    SQL Server Oracle的不同点

    - SQL Server使用IDENTITY属性创建自增列,每次插入新行时,该列的值会自动递增。 - Oracle则通过序列(Sequences)实现类似功能,序列是一个独立的对象,负责生成唯一的递增数值,可以与INSERT语句结合使用。 4....

    常用oracle动态性能视图

    - **SERIAL#**:如果一个 SID 被多个会话复用,这个数字会自增,确保每个会话都有一个唯一的序列号。 - **AUDSID**:审计会话 ID,用于审计目的,确保对会话活动的追踪。 - **USERNAME**:会话对应的 Oracle ...

    CodeSmith的列对象的ExtendedProperty的属性

    提供的示例代码展示了如何遍历一个表的所有列,并检查每个列的 `ExtendedProperties["CS_IsIdentity"]` 属性来判断该列是否为自增长标识列。如果为 `true`,则输出该列的名称。具体代码如下: ```csharp foreach...

    oracle创建表空间、表、主键、外键、序列

    主键是表中用于唯一标识记录的一列或一组列。在上面创建表时已经定义了主键。如果后来想添加主键,可以使用`ALTER TABLE`语句: ```sql ALTER TABLE 表名 ADD CONSTRAINT 主键约束名 PRIMARY KEY (列名); ``` 4. ...

    oracle触发器语法要点

    为了实现表中某列的自增功能,可以创建一个序列和相应的触发器。 ```sql CREATE TABLE tab_user ( id NUMBER(11) PRIMARY KEY, username VARCHAR(50), password VARCHAR(50) ); CREATE SEQUENCE my_seq ...

    Mysql Oracle 数据库开发设计及使用规范

    - 每一行都应通过唯一的键来标识。 - 表内不应包含依赖于其他键的非键信息。 在特殊情况下,若需要采用非标准范式或反模式,请确保DBA配合进行必要的性能测试以验证其适用性和效率。 **2. 字段设计规范** - 每...

    数据库-oracle-学习之路.docx

    在Oracle中,可以使用自增序列(如`GETUUID.NEXTVAL`)或随机值(如`DBMS_RANDOM.VALUE`)结合`SUBSTR`函数生成主键。 2. **数据库空间查询**: - 表空间是Oracle数据库中存储数据文件的逻辑单位,用于管理和分配...

    oracle建表

    - **PRIMARY KEY**:定义主键,一组唯一且非空的列,标识表中的每条记录。 - **FOREIGN KEY**:定义外键,用于建立表间的关系,实现参照完整性。 - **CHECK**:定义列值的条件,限制可接受的值范围。 例如: ``...

    Oracle SQL.doc

    1. **主键**:主键是表中的一个或多个字段,用于唯一标识每条记录。主键的取值要求包括: - **非空**:主键列的值不能为空。 - **唯一**:主键列的值在整个表中必须是唯一的。 - **限制**:一个表可以没有主键,...

Global site tag (gtag.js) - Google Analytics