`
fyd222
  • 浏览: 106555 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SQL基础--> 序列(SEQUENCE)、同义词(SYNONYM)

 
阅读更多

--=============================================

--SQL基础--> 序列(SEQUENCE)、同义词(SYNONYM)

--=============================================

一、序列

是一个Oracle对象,提供唯一的数字,在需要时根据指定的增量值来递增,通常用于产生主键值

类似于SQL server中的IDENTITY(int,1,1) 或者列为IDENTITY列。SQL server可以直接将列指定

IDENTITY列,在使用的时候可以不需要理会IDENTITY列,系统会自动递增,这样看来SQL

server 中主键的产生更为简便。

1.序列的特性:

自动提供唯一的数值

共享对象

主要用于提供主键值

代替应用代码

将序列值装入内存可以提高访问效率

2.CREATE SEQUENCE 语句定义序列:

CREATE SEQUENCE sequencename

[INCREMENT BY n] 定义序列增长步长,省略为1

[START WITH m] 序列起始值,省略为1

[{MAXVALUE n | NOMAXVALUE}] 序列最大值,NOMAXVALUE升序时,序列最大值的次方

降序时为-(默认也是为此)

[{MINVALUE n | NOMINVALUE}] 序列最小值,NOMINVALUE升序时,最小值为,降序时序列

最小值为-的次方(默认也是为此)

[{CYCLE | NOCYCLE}] 到达最大值或最小值后,继续产生序列(默认NOCYCLE

[{CACHE n | NOCACHE}]; 序列缓存与否(默认NOCACHE

关于创建序列,使用序列所需要的权限请参考:Oracle

--创建一个序列

SQL> CREATE SEQUENCE my_seq

2 INCREMENT BY 10

3 START WITH 100

4 MAXVALUE 150

5 NOCACHE

6 NOCYCLE;

Sequence created.

3.使用序列

NEXTVAL CURRVAL 伪列

NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

CURRVAL 中存放序列的当前值

第一次使用时CURRVAL不能用

使用时需要指定序列的对象名

将序列值装入内存可提高访问效率

序列在下列情况下出现裂缝:

回滚

系统异常

多个表同时使用同一序列

如果不将序列的值装入内存(NOCACHE), 可使用表USER_SEQUENCES 查看序列当前的有效值

--当第一次使用序列时指定了currval列,结果出现如下错误提示

SQL> SELECT my_seq.currval FROM dual;

SELECT my_seq.currval FROM dual

*

ERROR at line 1:

ORA-08002: sequence MY_SEQ.CURRVAL is not yet defined in this session

--使用nextval列,则成功执行,这就是NEXTVAL 必须在CURRVAL 之前指定,及第一次使用必须是NEXTVAL

SQL> SELECT my_seq.nextval FROM dual;

NEXTVAL

----------

100

SQL> SELECT my_seq.currval FROM dual;

CURRVAL

----------

100

4.查询序列

USER_SEQUENCES

DBA_SEQUENCES

ALL_SEQUENCES

查询数据字典视图USER_SEQUENCES获取序列定义信息

如果指定NOCACHE 选项,则列LAST_NUMBER 显示序列中下一个有效的值

SQL> SELECT sequence_name,min_value,max_value

2 increment_by,cycle_flag,order_flag,

3 cache_size,last_number

4 FROM user_sequences

5 WHERE sequence_name IN ('SEQ1','SEQ2','MY_SEQ');

SEQUENCE_NAME MIN_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER

------------------------------ ---------- ------------ - - ---------- -----------

MY_SEQ 1 150 N N 0 110

SEQ1 1 200 Y N 0 110

SEQ2 1 200 Y N 0 31

5.序列应用举例:

SQL> conn robinson/lion

Connected.

SQL> ALTER TABLE robinson.dept MODIFY(deptno NUMBER);

Table altered.

--出现了下面的错误,怀疑是授权的问题

SQL> INSERT INTO robinson.dept(deptno,dname,loc)

2 VALUES(my_seq.currval,'Customers','HongKong');

VALUES(my_seq.currval,'Customers','HongKong')

*

ERROR at line 2:

ORA-02289: sequence does not exist

--使用sys帐户授权成功

SQL> conn sys as sysdba

Enter password:

Connected.

SQL> GRANT ALL ON my_seq TO robinson;

Grant succeeded.

--查看权限已被成功授予

SQL> select grantee,owner,table_name,grantor,privilege from user_tab_privs;

GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE

---------- ---------- ------------- -------------- --------------

ROBINSON SCOTT EMP SCOTT SELECT

ROBINSON SYS MY_SEQ SYS SELECT

ROBINSON SYS MY_SEQ SYS ALTER

--成功授权之后还是出现同样的提示

SQL> INSERT INTO robinson.dept(deptno,dname,loc)

2 VALUES(my_seq.currval,'Customers','HongKong');

VALUES(my_seq.currval,'Customers','HongKong')

*

ERROR at line 2:

ORA-02289: sequence does not exist

--sequence名字前增加schema sys ,出现了如下提示

SQL> INSERT INTO robinson.dept(deptno,dname,loc)

2 VALUES(sys.my_seq.currval,'Customers','HongKong');

VALUES(sys.my_seq.currval,'Customers','HongKong')

*

ERROR at line 2:

ORA-08002: sequence MY_SEQ.CURRVAL is not yet defined in this session

--修改currvalnextval,操作成功

SQL> INSERT INTO robinson.dept(deptno,dname,loc)

2 VALUES(sys.my_seq.nextval,'Customers','HongKong');

1 row created.

SQL> SELECT * FROM dept;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

110 Customers HongKong

--第二次使用currval可以成功执行,因该表未设置主键,故未提示冲突

SQL> INSERT INTO robinson.dept(deptno,dname,loc)

2 VALUES(sys.my_seq.currval,'Customers','HongKong');

1 row created.

SQL> SELECT * FROM dept;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

110 Customers HongKong

110 Customers HongKong

6.修改序列

修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存

修改序列的注意事项

必须是序列的拥有者或对序列有ALTER 权限

只有将来的序列值会被改变

改变序列的初始值只能通过删除序列之后重建序列的方法实现

其它的一些限制

SQL> ALTER SEQUENCE my_seq

2 INCREMENT BY 20

3 MAXVALUE 160

4 CYCLE;

Sequence altered

--注意当序列值达到最大值后,其初始值变成了,但增量值不会发生变,如下面的例子

SQL> select sys.my_seq.nextval from dual;

NEXTVAL

----------

130

SQL> /

NEXTVAL

----------

150

SQL> / --此时序列值变成了

NEXTVAL

----------

1

SQL> / --此时序列值按作为增量值,所以结果为

NEXTVAL

----------

21

7.删除序列

使用DROP SEQUENCE 语句删除序列

删除之后,序列不能再次被引用

SQL> DROP SEQUENCE sys.my_seq;

DROP SEQUENCE sys.my_seq

*

ERROR at line 1:

ORA-01031: insufficient privileges

SQL> CONN sys as sysdba

Enter password:

Connected.

SQL> DROP SEQUENCE my_seq;

Sequence dropped

8.创建序列的详细语法:CREATE SEQUENCE

二、同义词

Oracle对象的别名,使用同义词访问相同的对象

可以为表、视图、存储过程、函数或另一同义词等对象创建同义词

方便访问其它用户的对象,隐藏了对象的身份

缩短对象名字的长度

1.创建同义词的权限

CREATE ANY SYNONYM

CREATE PUBLIC SYNONYM

2.创建同义词

CREATE [PUBLIC] SYNONYM synonym_name FOR object;

3.查看同义词

DBA_OBJECTS

DBA_SYNONYMS

USER_SYNONYMS

--查看系统同义词

SQL> SELECT object_name,object_type,created,status FROM dba_objects

2 WHERE object_name='S';

SQL> SELECT OWNER,SYNONYM_NAME,TABLE_OWNER,TABLE_NAME

2 FROM dba_synonyms;

4.删除同义词

DROP SYNONYM synonymname

所需权限

DROP PUBLIC SYNONYM

DROP ANY SYNONYM

5.同义词应用举例

--演示使用scoot帐户创建公共同义词

SQL> SHOW USER;

USER is "SCOTT"

SQL> CREATE PUBLIC SYNONYM DEPARTMENT FOR scott.dept;

Synonym created.

--robinson帐户访问同义词DEPARTMENT

SQL> CONN robinson/lion; --注意此处robinson必须对scott.dept具有select权限,否则访问DEPARTMENT不成功

Connected.

SQL> SELECT * FROM DEPARTMENT;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

SQL> CONN scott/tiger;

Connected.

--对于创建的公共同义词没有出现在user_synonyms视图中

SQL> SELECT synonym_name,table_owner,table_name FROM user_synonyms;

no rows selected

--scott 再次为同一个对象创建一个私有同义词,且与公共同义词同名,并没有报错

SQL> CREATE SYNONYM DEPARTMENT FOR scott.dept;

Synonym created.

--scott再次查看同义词视图中有一条记录,则该记录为私有同义词

SQL> SELECT synonym_name,table_owner,table_name FROM user_synonyms;

SYNONYM_NAME TABLE_OWNER TABLE_NAME

------------------------------ ------------------------------ ------------------------------

DEPARTMENT SCOTT DEPT

--使用sys帐户查看为条记录,一条为私有,一条为公共,哪条为公,哪条为私,不太好区分

SQL> CONN sys as sysdba;

Enter password:

Connected.

SQL> SELECT synonym_name,table_owner,table_name FROM dba_synonyms

2 WHERE table_name = 'DEPT';

SYNONYM_NAME TABLE_OWNER TABLE_NAME

------------------------------ ------------------------------ ------------------------------

DEPARTMENT SCOTT DEPT

DEPARTMENT SCOTT DEPT

--scott用户登陆后删除公共同义词,提示权限不够

SQL> DROP PUBLIC SYNONYM DEPARTMENT;

DROP PUBLIC SYNONYM DEPARTMENT

*

ERROR at line 1:

ORA-01031: insufficient privileges

--scott授予删除同义词的权限

SQL> CONN sys as sysdba;

Enter password:

Connected.

SQL> GRANT DROP ANY SYNONYM ,DROP PUBLIC SYNONYM TO scott;

Grant succeeded.

--scott 成功删除同义词

SQL> CONN scott/tiger;

Connected.

SQL> DROP PUBLIC SYNONYM DEPARTMENT;

Synonym dropped.

--删除公共同义词后robinson不可访问

SQL> CONN robinson/lion;

Connected.

SQL> SELECT * FROM DEPARTMENT;

SELECT * FROM DEPARTMENT

*

ERROR at line 1:

ORA-00942: table or view does not exist

--scott对于私有的同义词仍然可以使用

SQL> conn scott/tiger;

Connected.

SQL> SELECT * FROM DEPARTMENT;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

--最后删掉私有同义词

SQL> DROP SYNONYM DEPARTMENT;

Synonym dropped.

6.创建同义词的详细语法:CREATE SYNONYM

三、总结:

序列

主要用于产生主键值

创建删除时所需的权限

关于sequence_name.nextvalsequence_name.currval的使用,nextval优先于currval使用

对于不同用户创建的序列,使用时需要带上schema,如scott.seq1.nextval

对于循环使用序列,当达到最大值后,初始值为

同义词

Oracle对象中的一个同名对象

可以分为公共同义词和私有同义词,两者可同名

创建和删除时所需的权限

对于同义词的访问,需要对原始对象具有适当的权限,否则同义词不可用

四、更多

Oracle 用户、对象权限、系统权限

SQL 基础--> ROLLUPCUBE运算符实现数据汇总

SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)

SQL 基础--> 视图(CREATE VIEW)

Oracle 常用目录结构(10g)

五、如转载,请注明出处。

分享到:
评论

相关推荐

    Sql_Lab4视图、序列、同义词和索引[收集].pdf

    在SQL中,视图、序列、同义词和索引是数据库管理中常见的概念,它们分别用于不同的目的,以提高数据管理和使用的效率。 视图(View)是虚拟表,它根据用户的需求,通过查询实际存在的表来构建。视图中的数据并非...

    Sql_Lab4视图、序列、同义词和索引[借鉴].pdf

    SQL是Structured Query Language的缩写,是用于管理关系数据库的标准语言。本实验主要涉及四个关键概念:...这些实验和练习旨在加深对SQL中视图、序列、同义词和索引的理解和应用,帮助用户更高效地管理和操作数据库。

    MLDN魔乐科技JAVA培训_Oracle课堂22_序列、同义词.rar

    Java的JDBC提供了接口和类来与Oracle数据库交互,如`java.sql.Connection`、`java.sql.Statement`、`java.sql.PreparedStatement`等,通过这些接口,开发者可以在Java程序中创建、使用序列和同义词。 综上所述,...

    Oracle实验3:视图、序列、同义词和索引.docx

    在Oracle数据库管理中,实验3涉及到了几个关键的数据库对象:视图、序列、同义词和索引。这些元素是构建和管理高效数据库系统的重要组成部分。以下是它们的详细解释和示例: 1. **视图(View)**: 视图是从一个或...

    ORACLE 数据对象的分析2(索引_序列_同义词)

    ### Oracle 数据对象的分析2(索引_序列_同义词) #### 一、索引(INDEX) **索引**是提高数据访问效率的关键技术之一,在Oracle数据库中扮演着极其重要的角色。它允许用户更快地查找和检索数据,从而极大地提高了...

    数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf

    Oracle数据库的SQL开发教程涵盖了广泛的主题,其中包括序列、索引和同义词这些重要的数据库对象。在本章中,我们将深入探讨这些概念及其在数据库管理中的应用。 **序列(SEQUENCE)**是Oracle数据库中用于生成唯一...

    oracle 同义词和序列

    删除同义词同样使用 `DROP SYNONYM` 语句。 最后,序列是 Oracle 中用于生成唯一、连续整数的数据库对象,常用于自动生成主键值。创建序列时,可以指定初始值、步长、最大值和最小值,还可以设置是否循环以及缓存...

    oracle第13讲使用视图、索引、序列和同义词[定义].pdf

    在第13讲中,我们重点关注了四个核心概念:视图、索引、序列和同义词,这些都是数据库管理和优化的重要工具。 1. 视图(View) 视图是数据库中的一个虚拟表,它是由SQL SELECT语句定义的,基于一个或多个实际表(或...

    视图、同义词和序列

    Oracle数据库中的视图、同义词和序列是数据库管理和应用程序设计中的重要元素。视图提供了一种抽象数据的方式,使得用户可以以简化的方式访问数据库,同时可以实现安全性和隐私保护。同义词则允许为数据库对象创建...

    Oracle基本语法

    ### Oracle基本语法详解 在Oracle数据库管理中,掌握基本语法对于...以上是Oracle数据库中关于权限操作、方案、序列、同义词等基础概念及操作的详细介绍。通过这些基本语法的学习,可以有效地管理和操作Oracle数据库。

    视图同义词序列索引1

    在Oracle数据库中,视图、同义词和序列都是重要的数据管理工具,它们各自有特定的功能和使用场景。 首先,让我们来深入理解视图。视图是基于一个或多个表的虚拟表,它是由SQL查询结果所形成的逻辑表。创建视图的...

    orcle索引_视图序列同义词实验

    ### Oracle索引、视图、序列与同义词实验知识点详解 #### 一、Oracle索引的创建与管理 **1.1 创建普通索引** - **实验目标**:掌握如何在Oracle数据库中为特定列创建索引。 - **实验步骤**:在SCOTT模式下,为`...

    老二牛车第四章理论课数据库对象.pdf

    同义词在Oracle数据库中是指向另一个数据库对象的引用,它可以是表、视图、序列、过程、函数、程序包甚至是其他同义词。通过使用同义词,用户可以轻松地访问其他模式中的数据库对象,而无需显式指定模式前缀。例如,...

    Oracle dual详解

    `DUAL`表是属于`SYS`模式下的一个表,并且通过`PUBLIC`同义词的形式供所有用户使用。 ``` SQL> SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_NAME LIKE '%DUAL%'; OWNEROBJECT_NAME...

    orcale数据库操作语言

    - 示例:创建一个名为`emp`的同义词,指向表`emp`。 ```sql CREATE SYNONYM emp FOR emp; ``` - **授权创建同义词**: - `GRANT CREATE SYNONYM TO [username];` - 示例:授予用户`scott`创建同义词的权限。 ...

    oracle对象管理及使用.docx

    本次实验的主要目的是让学生掌握Oracle数据库中常用对象的基本操作方法,包括表、索引、视图、同义词和序列等,并能够运用这些对象解决实际问题。通过实验,学生应该能够熟练地创建、修改、查看以及删除这些数据库...

    Oracle 10g SQL 基础培训

    7. 数据库对象:除了表,还有其他数据库对象,如序列(SEQUENCE)、同义词(SYNONYM)、索引组织表(IOT)和簇(CLUSTER)。理解它们的作用和使用方法是提高数据库管理技能的关键。 8. SQL*Plus工具:SQL*Plus是...

    00576 Oracle公司内部数据库培训资料-Les12_其它数据库对象(PPT 24页).ppt

    本培训资料着重介绍了Oracle中的其他数据库对象,包括序列(Sequences)、索引(Indexes)和同义词(Synonyms),这些都是数据库设计和管理中的关键组成部分。 **序列(Sequences)** 序列是一种特殊类型的数据库...

    oracle对象创建

    - **Create synonym**: 创建同义词。 - **public**: 创建公共同义词。 - **objectname**: 对象名(表、视图等)。 #### 删除同义词 ```sql Drop synonym sy_name ``` - **Drop synonym**: 删除同义词。 ### 9. ...

    大型数据库系统概论课件 第6章 Oracle9i数据库对象的管理(3).ppt

    而在SQL中,创建同义词的命令格式是`CREATE [PUBLIC] SYNONYM 同义词名 FOR 数据库对象名;`。查看和编辑同义词也可以通过企业管理器或查询相关的系统视图,如DBA_SYNONYMS,来获取或修改同义词信息。 簇(Cluster)...

Global site tag (gtag.js) - Google Analytics