Oracle Sequence

Oracle的字段类型 没有像MYSQL 'AUTO_INCREMENT' 功能,要想实现数值递增功能,可以用sequence 来实现


1) 查询当前序列        

SELECT SEQUENCE_NAME,MIN_VALUE,MAX_VALUE,INCREMENT_BY,LAST_NUMBER FROM 
USER_SEQUENCES;
 2) 创建序列

create sequence sequence_name;       

 3) 删除序列

drop sequence sequence_name;

 4) 插入数据时使用 sequence_name.nextval 值


* 11.2 版本sequence 起始值:

    11.2以前的版本sequence起始值默认都是从1开始,而11.2版本起始值确实2
SQL> create table student(
      NO NUMBER(10) NOT NULL,
      NAME VARCHAR(40) NOT NULL
);  2    3    4  

Table created.

SQL> 
SQL> create sequence seq_student_no start with 1 increment by 1;

Sequence created.

SQL> insert into student values(seq_student_no.nextval, 'student1');

1 row created.

SQL> select * from student;

        NO NAME
---------- ----------------------------------------
         2 student1
这时因为11.2版本中表的创建默认都是以 ' SEGMENT CREATION DEFERRED' 方式创建的,即表结构并不是随着create语句的执行而立即创建

而是直到第一条insert语句执行才会真正创建表

这时insert语句分为两个过程: 1. 创建表, 2. 插入数据

而在这个过程中, sequence.nextval执行了两次,所以会从2开始


要想sequence 从1开始可以采取以下方法之一:

1)  alter system set DEFERRED_SEGMENT_CREATION = false;

2) alter session set DEFERRED_SEGMENT_CREATION = false;

3) CREATE TABLE .... SEGMENT CREATION IMMEDIATE;

你可能感兴趣的:(Oracle Sequence)