现在的位置: 首页 > 综合 > 正文

Oracle学习笔记七:视图、同义词、序列

2013年11月08日 ⁄ 综合 ⁄ 共 1900字 ⁄ 字号 评论关闭
 1.视图:从一个或多个表/视图导出的表。视图是一个虚表,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义操作与视图相关联的基表。
  ①优点:为用户集中数据,简化查询和处理;屏蔽数据性的复杂性;简化用户权限管理;便于数据共享
  ②创建视图:
        CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW [schema.]view_name  /*FORCE强制创建,无论基表是否存在或拥有者是否有权限*/
       [(column_name [...n])]
       AS
       select_statement
       [WITH CHECK OPTION [CONSTRAINT constraint_name]]  /*修改符合指定的限制条件,如age>30,只能向视图插入>30的值*/
       [WITH READ ONLY]    /*视图不能删、插入、更新,只能检索*/
  ③例:
        CREATE OR REPLACE VIEW CS_KC_AVG(num,score_avg)    /*在视图中显示的列名num,score_avg*/
       AS
       SELECT XH,AVG(CJ)
           FROM CS_KC
               GROUP BY XH;
  ④更新视图
    可更新视图条件:单表;不使用连接函数、集合运算函数和组函数;创建视图的SELECT语句没有集合函数且没有GROUP BY、ONNECT BY、START WITH子句及DISTINCT关键字;不包含计算得到的列;不包含只读属性。
    对视图的多表更新可用替代触发器。
  ⑤删除视图
        DROP VIEW [schema.]view_name
2.同义词:给不同的用户使用数据库对象时提供一个简单的、唯一标识数据库对象的名称。公用、私有同义词
  同义词可以指向的对象:表、视图、过程、函数、包和序列。创建了数据库链接后还可为远程数据库创建同义词。
  ①创建同义词
        CREATE [PUBLIC] SYSNONYM [schema.]synonym_name    /*PUBLIC表公用同义词,schema指定将要创建同义词所属的方案,默认当前用户*/
           FOR [schema.]object [@dblink]    /*@dblink表明同义词是远程数据库同义词*/
    例:
        CREATE SYNONYM SYSTEM.XS
           FOR ADMIN.XS@MY_LINK;
  ②删除同义词
        DROP [PUBLIC] SYNONYM [schema.]synonym_name    /*schema指定要删除的同义词的用户方案*/
3.序列:通过提供唯一数值的顺序表来简化程序设计工作。不保证生成一串连续不断的值。
  ①创建/修改序列:使用过程中可修改递增量,不能修改当前值
        CREATE|ALERT SEQUENCE [schema.] sequence_name    /*序列名称*/
       [INCREMENT BY integer]    /*递增或递减值*/
       [START WITH integer]    /*初始值*/
       [MAXVALUE integer|NOMAXVALUE]     /*最大值*/
       [MINVALUE integer|NOMINVALUE]     /*最小值*/
       [CYCLE|NOCYCLE]    /*若循环,升序达到最大后生成最小,降序达到最小后生成最大;不循环达到极限后停止生成*/
       [CACHE integer|NOCACHE]    /*设置高速缓冲区*/
       [ORDER|NOORDER]    /*序列号是序列,否则按照次序生成*/
  ②例:
       CREATE SEQUENCE ADMIN.SEQ_TEST
       INCREMENT BY -2 START WITH 2000
       MAXVALUE 2000
       MINVALUE 1
       CYCLE
       CACHE 20
       NOORDER;
  ③使用:
        SELECT SEQ_TEST.NEXTVAL FROM dual;    /*下一个值*/
       SELECT SEQ_TEST.CURRVAL FROM dual;    /*当前值,必须在进行NEXTVAL后用*/
  ④删除序列:
        DROP SEQUENCE sequence_name;

抱歉!评论已关闭.