• 从零开始学Oracle—内建对象(五)


    继续上一篇

                                                   1.   序列
    查询当前用户下的序列:select * from user_sequences
    定义:用来生成唯一、连续的整数的数据库对象,序列通常用来自动生成主键或唯一键的值、可升、可降序排列.
    语法:    Create  sequence 序列名称   //从1开始 每次自动增加1 没有最大值
                 [star with 值]  指定要生成的第一个序列号,对于升序默认值为最小值、反之...
                 [increment  by 值]   间隔数
                 [maxvalue  值|nomaxvalue]  序列最大值,如果指定为nomaxvalue,则升序最大值为10的27次方,降序-1.
                 [minvalue    值|nominvalue]  序列最小值,-----------------------升序为1,降序为10的负26次方
                 [cycle|nocycle]   cycle指序列到达最大或最小时,将从头开始生成值  nocycle值不在生成
                 [cache  值|nocache]  预先分配一组序列号,将其保存在内存中. 默认缓存20个序列

    访问序列方法:  currval 和nextval   --当前序列 select 序列名.currval from dual
    更改序列:Alter sequence 序列名
    删除序列:drop sequence 序列名
    注意-------------序列使用时需要先用nextval输出完以后再来使用
    使用:
      1.和表关联作为表的字段的值
         a) create table student(
              xh number(4) primary key, --学号
              xm varchar2(20) not null --姓名
            );

            要求:学号字段 从1000开始每次增加4 最大值9999
             --建立序列
               create sequence xh_seq
                      start with 1000 --从1000开始
                      increment by 4  --每次增加4
                      maxvalue 9999   --最大值 9999
                      ;
             --使用SQL语句关联
             insert into student values
                 (xh_seq.nextval,'Mike');
             insert into student values
                 (xh_seq.nextval,'John');
             insert into student values
                 (xh_seq.nextval,'Rose');
         
          --特点:能产生唯一的值,但是不能保证值在表中的连续性
     
       b) create table teacher(
               teacherxh varchar2(10) primary key, 
               teachername varchar2(20)
              );
         要求:教师的编号的格式是TH00001
                             TH00002
                              ....
          
       --建立序列
            create sequence teacher_seq
                  maxvalue 99999;
       --
         insert into teacher values ('TH'||
           ltrim(to_char(teacher_seq.nextval,'00000')),
           '张三');
           insert into teacher values ('TH'||
           ltrim(to_char(teacher_seq.nextval,'00000')),
           '李');
          insert into teacher values ('TH'||
           ltrim(to_char(teacher_seq.nextval,'00000')),
           '王');
                                                                  2.视图
    查看当前用户下的视图:select view_name from user_views;
    作用:隐藏数据,增加系统的安全性
    语法:Create [or replace] [Force|noForce] veiw 视图名 [(别名1,别名2...)]
             AS 子查询
             [with check option [constraint 约束名]]
             [with read only]  视图是只读的
     其中:or replace 表示替代已经存在的视图
             force 表示不管基表是否存在,创建视图
              noforce 表示只有基表存在时,才创建视图.
             别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名。
             with check option 对视图操作时必须满足子查询的约束条件。后面的约束名是该约束条件的名字
             删除视图者需要是视图的建立者或者拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据
    对视图操作需满足以下条件:
              <1>建立视图的select语句必须是简单的select语句
                   简单:不能是多表的查询
                        不能有分组函数
               <2>建立视图的时候不能带with readonly关键字
    例:

    Code

                                                                    3.同义词
    查看用户创建的同义词:select * from user_synonum;
    定义:数据库对象的一个别名
    用途:1.简化SQL
            2.隐藏对象名称和所有者
            3.为分布式数据库的远程对象提供了位置透明度
            4.提供对象的公共访问
    注意:使用同义词前需要确保用户得到访问同义词的权限
    同义词分为:
     1.私有同义词  --只能被当前用户模式访问  要在自身模式下创建须 Create synonum 权限
     2.共有同义词  --须Create any synonym权限
    语法: Create [or replace] [public] synonym 同义词名称 for 要创建同义词对象的名称
                                                                     4.索引
    作用:加快查询  索引一定是建立在表上的.
    语法:Create Index 索引名 on 表名(列名)
    创建唯一索引: Create unique Index 索引名 on 表名(列名)
    创建位图索引: Create bitmap Index 索引名 on 表名(列名)
    数据的不同值对于记录的行数来说 是个很小的数  这种字段适合使用位图索引 它比普通索引效率高
    不能用索引的条件:
    <1>规则1:索引的字段不能参与运算
    <2>规则2:索引的字段上不能使用函数 
                                                                  5.簇
    定义:用于多表联合查询,提高数据查询效率
    1.簇的创建必须在创建表结构时指定
    2.如果使用簇,则两个表必须要有主外键关系
    簇的使用步骤:
    1.创建簇    Create cluster 簇名称(字段名 数据类型);
    2.创建主键表使用簇 
    Create table depa (
        deptno number(2) primary key,
        dname varchar2(20)
     ) cluster 簇名(deptno);
    3.创建外键表使用簇
    Create table empa(
       empno number(4) primary key,
       ename varchar2(20)
       ) cluster 簇名(empno)
    4.在簇上建立索引
    Create Index  索引名 on cluster 簇名
     

  • 相关阅读:
    hdu4717 The Moving Points(二分做法)
    C++中用rand()和srand()产生随机数方法介绍
    教你看懂C++类库函数定义之一---HRESULT 宏
    [置顶] IOS培训资料
    调试出不来 断点不起作用 调试技巧 MyEclipse进不了调试
    [置顶] 编程模仿boost::function和boost::bind
    模拟红外协议接收程序
    Java 使用JDBC、DBCP、C3P0访问数据库
    Linux点亮一个灯
    Makefile解析(最简单的LED)
  • 原文地址:https://www.cnblogs.com/sunjie9606/p/2167409.html
Copyright © 2020-2023  润新知