zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

其它数据库对象的相关介绍

数据库对象 介绍 相关 其它
2023-09-14 09:13:29 时间

什么是序列?

  • 自动生成的唯一序列号
  • 是可分享的对象
  • 通常用来创建主键值
  • 替代应用程序代码
  • 当缓冲在内存中,加速访问序列的效率
SQL> create sequence seq_empno start with 7935 increment by 1 cache 50;

Sequence created.

SQL> select * from user_sequences;

SEQUENCE_NAME                                                                                                                     MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER S E S S K
-------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ------------ - - ---------- ----------- - - - - -
SEQ_EMPNO                                                                                                                                 1 1.0000E+28            1 N N         50        7935 N N N N N

SQL> 
SQL> 
SQL> select SEQ_EMPNO.nextval from dual;

   NEXTVAL
----------
      7935

SQL> select SEQ_EMPNO.currval from dual;

   CURRVAL
----------
      7935

SQL> 

 

SQL> insert into emp (empno) values (SEQ_EMPNO.nextval);

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7935
      7936
      7937
      7938
      7939
      7940
      7941
      7942
      7943
      7944
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 24-JAN-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 02-APR-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
         1 tom                                              700

25 rows selected.

SQL> insert into emp (empno) values (SEQ_EMPNO.nextval);

1 row created.

SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7935
      7936
      7937
      7938
      7939
      7940
      7941
      7942
      7943
      7944
      7945
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 24-JAN-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 02-APR-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
         1 tom                                              700

26 rows selected.

SQL> 
SQL> 
SQL> select * from user_sequence;
select * from user_sequence
              *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select * from user_sequences;

SEQUENCE_NAME                                                                                                                     MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER S E S S K
-------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ------------ - - ---------- ----------- - - - - -
SEQ_EMPNO                                                                                                                                 1 1.0000E+28            1 N N         50        7985 N N N N N

SQL> 

定义一个序列,自动生成连续的数字

CREATE SEQUENCE sequence

SQL> select * from user_sequences;

SEQUENCE_NAME                                                                                                                     MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER S E S S K
-------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ------------ - - ---------- ----------- - - - - -
SEQ_EMPNO                                                                                                                                 1 1.0000E+28            1 N N         50        7985 N N N N N

SQL> alter sequence SEQ_EMPNO minvalue 7946;
alter sequence SEQ_EMPNO minvalue 7946
*
ERROR at line 1:
ORA-04007: MINVALUE cannot be made to exceed the current value


SQL> alter sequence SEQ_EMPNO minvalue 7950;
alter sequence SEQ_EMPNO minvalue 7950
*
ERROR at line 1:
ORA-04007: MINVALUE cannot be made to exceed the current value


SQL> alter sequence SEQ_EMPNO minvalue 7945;

Sequence altered.

SQL> select * from user_sequences;

SEQUENCE_NAME                                                                                                                     MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER S E S S K
-------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ------------ - - ---------- ----------- - - - - -
SEQ_EMPNO                                                                                                                              7945 1.0000E+28            1 N N         50        7946 N N N N N

SQL> alter sequence SEQ_EMPNO maxvalue 9999;

Sequence altered.

SQL> alter sequence SEQ_EMPNO INCREMENT BY 5;

Sequence altered.

SQL> select * from user_sequences;

SEQUENCE_NAME                                                                                                                     MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER S E S S K
-------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ------------ - - ---------- ----------- - - - - -
SEQ_EMPNO                                                                                                                              7945       9999            5 N N         50        7950 N N N N N

SQL> alter sequence SEQ_EMPNO cycle;

Sequence altered.

SQL> select * from user_sequences;

SEQUENCE_NAME                                                                                                                     MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER S E S S K
-------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ------------ - - ---------- ----------- - - - - -
SEQ_EMPNO                                                                                                                              7945       9999            5 Y N         50        7950 N N N N N

SQL> alter sequence SEQ_EMPNO cache 100;

Sequence altered.

SQL> select * from user_sequences;\
  2  
SQL> select * from user_sequences;

SEQUENCE_NAME                                                                                                                     MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER S E S S K
-------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ------------ - - ---------- ----------- - - - - -
SEQ_EMPNO                                                                                                                              7945       9999            5 Y N        100        7950 N N N N N

SQL> alter sequence SEQ_EMPNO start with 7947;
alter sequence SEQ_EMPNO start with 7947
                         *
ERROR at line 1:
ORA-02283: cannot alter starting sequence number


SQL> 

索引是什么?

  • 是一个schema对象
  • 被Oracle服务器使用通过具有指示的行来加速检索
  • 通过快速路径访问访问定位数据可以减少磁盘I/O
  • 被Oracle服务器自动使用和维护。