东软实习之数据库(12)——序列、索引、同义词

  #序列

    序列的概念

      序列是一种用于产生唯一数字列值的数据库对象,一般使用序列自动地生成主码值或唯一键值,序列可以是升序或降序。

      序列特点:

      • 可以自动产生唯一数值;
      • 可被多个用户共享;
      • 典型应用是生成主键值,用于标识记录的唯一性;
      • 使用缓存加速序列的访问速度。

    #创建序列语法

      

       创建序列,必须有CREATE SEQUENCE或CREATE ANY SEQUENCE权限。

       序列被创建后,可以通过查询数据字典视图USER_SEQUENCES查看序列信息。

      创建序列

    1. sequence 序列产生器的名称
    2. INCREMENT BY n 指定序列值之间的间隔n,如果省略该项间隔为1
    3. START WITH n 指定起始序列值n,如果该项省略起始值为1
    4. MAXVALUE n 指定最大序列值
    5. NOMAXVALUE 指定最大序列值为10的27次方,而降序的最大值为-1,这是一默认选项
    6. MINVALUE n 指定最小序列值
    7. NOMINVALUE 指定升序最小序列值为1,而降序最小序列值为负10的26次方,这是一默认选项
    8. CYCLE | NOCYCLE 指定序列值在达到最大值或最小值之后继续产生序列值,NOCYLE表示不再产生,NOCYLE是默认选项。
    9. CACHE n | NOCACHE 指定序列值被Oracle服务器预先分配并存储在内存中,NOCACHE表示不预先分配并存储,CACHE 20是默认选项

      

      NEXTVAL和CURRVAL伪列

        可用语句sequence_name.CURRVAL和sequence_name.NEXTVAL来访问序列;

      • CURRVAL:获取当前序列值;
      • NEXTVAL:返回下一个有效的序列值;
      • CURRVAL和NEXTVAL都返回NUMBER值;
      • CURRVAL能被引用之前,必须使用NEXTVAL产生一个序列值;

      NEXTVAL和CURRVAL伪列

        您可以在下列情况使用NEXTVAL 和 CURRVAL:

      •  SELECT 语句的SELECT列表中,但不包括子查询中的SELECT语句
      • INSERT 语句中的子查询SELECT列表中
      • INSERT 语句的VALUES子句中
      • UPDATE 语句的SET子句中

        下列情况不能使用 NEXTVAL 和 CURRVAL:

      • 在视图的SELECT列表中
      • 包含DISTINCT关键字的SELECT语句中
      • 含有 GROUP BY, HAVING, ORDER BY子句的SELECT语句中
      • SELECT, DELETE, UPDATE 语句的子查询中
      • 含有 DEFAULT表达式的 CREATE TABLE、 ALTER TABLE 语句中

    #创建序列

        

    #修改序列

      

      

    #删除序列

      



  #索引

     索引的概念

      索引是: 方案(schema)中的一个数据库对象;

           在数据库中,用来加速对表的查询速度;

           通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O;

           与表独立存放,但需要依附于表,是在表的基础上创建的;

           由 Oracle数据库自动维护;

          (注: 如果您删除某个表,那么和该表相关的索引也被删除。)

         

    #创建索引

       创建索引有两种方式:自动创建、手动创建

      自动创建: 当在表上定义一个PRIMARY KEY 或者UNIQUE 约束条件时,Oracle数据库自动创建一个对应的唯一索引;

      手动创建: 用户可以创建索引以加速查询,在需要创建索引的字段上创建需要的索引。

       

    #测试索引

       

      

    适合创建索引情况

    1. 查询列的数据范围很广泛;
    2. 查询列中包含大量的NULL值, ,因为空值不包含在索引中;
    3. WHERE条件中的列或者多表连接的列适合创建索引;
    4. 欲查询的表数据量很大,而且大多数的查询得到结果集的数量占总记录量的2%~4%;
    5. 过多的索引并不总是更有好处,过多的索引并不意味着更快的查询速度,每一次对含有索引的表进行DML操作就意味着索引必须更新,过多的索引会导致在DML操作后Oracle服务器要花费更多的时间在索引的更新上。

     不适合创建索引的情况

    1. 很小数据量的表;
    2. 在查询中不常用来作为查询条件的列;
    3. 查询最终得到的结果集很大;
    4. 频繁更新的表(索引对于DML操作是有部分负面影响的) ;
    5. 索引列作为表达式的一部分被使用时(比如常查询的条件是SALARY*12,此时在SALARY列上创建索引是没有效果的) ;

     #删除索引

       

      删除索引后,索引中的数据及定义被删除,索引所占的数据空间被释放,但表中的数据仍然存在。

      常用与索引相关的数据字典视图有:

      • USER_INDEXES:用户的索引对象的定义,包含索引的名字和索引的一些相关属性(比如唯一性等)
      • USER_IND_COLUMNS:用户索引对象的列的定义信息,会列出索引名字,表名字,和列的名字等。


   ##本章重点总结

  1.  理解序列、索引对象的作用及概念;
  2. 掌握序列的创建及使用方法;
  3. 掌握索引的创建及使用方法;
  4. 掌握何时应该创建索引;

猜你喜欢

转载自www.cnblogs.com/destinywxy/p/9341409.html