序列、索引、同义词

一、序列的概念
  • 序列(SEQUENCE)
  • 序列是按照一定规则能自动增加/减少数字的一种数据库对象。
  • 通常可以使用序列自动地生成主键值。
二、创建序列
  • 语法

CREATE SEQUENCE [schema.] sequencename
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];

  • sequencename:序列对象的名字
  • INCREMENT BY n:序列连续两个值之间的间隔n,默认为1。
  • START WITH n :序列起始值n,该项省略,起始值为1
  • MAXVALUE n :序列最大值;NOMAXVALUE :指定序列无最大值
  • MINVALUE n :序列最小值;NOMINVALUE :指定序列无最小值
  • CYCLE|NOCYCLE:表示序列在达到最大值或最小值之后是否继续产生序
    列值,NOCYLE表示不再产生,NOCYLE是默认选项。
  • CACHE n|NOCACHE:表示序列值被服务器预先分配并存储在内存中,
  • NOCACHE:表示不预先分配并存储,CACHE 20是默认选项
  • 例子
  • 创建序列test_seq,起始值为10,每次增长2,最大值100,最小值9,循环序列,每次缓存10
CREATE  SEQUENCE  test_seq 
START WITH 10        --序列从10开始 
INCREMENT BY 2     --序列每次增加2 
MAXVALUE 100        --序列最大值100 
MINVALUE 9          --序列最小值9 
CYCLE             --序列循环,每次增加2,一直到100后回到9从新开始 
CACHE 10;         --缓存中序列值个数为10
三、序列属性
  • NEXTVAL和CURRVAL伪列
  • CURRVAL:表示序列返回的当前值
  • NEXTVAL:表示序列返回的下一个值
  • CURRVAL在被引用之前,必须先使用NEXTVALL来产生一个序列的值
  • 可用语句 序列名.CURRVAL或序列名.NEXTVAL来访问序列
  • 可以在下列情况下使用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 语句中
  • 使用序列
  • 创建序列student_seq
GREATE SEQUENCE student_seq
START WITH 10000
INCREMENT BY 1;
  • 使用上面创建好的序列生成student表中的sid列插入值
INSERT INTO student
VALUES (student_seq.NEXTVAL,'Scott','Computer',11);
  • 查看上面创建的序列的当前值
SELECT student_seq.CURRVAL  
FROM dual;
  • 修改序列
  • 修改序列的语法
    ALTER SEQUENCE [schema.]sequencename
    [INCREMENT BY n]
    [MAXVALUE n | NOMAXVALUE]
    [MINVALUE n | NOMINVALUE]
    [CYCLE | NOCYCLE]
    [CACHE n | NOCACHE];
    注意:在修改序列的语法中没有没有START WITH子句
  • 正确修改的例子
ALTER SEQUENCE test_seq 
INCREMENT BY 4    --序列每次增加4 
MAXVALUE 1000     --序列最大值1000 
NOCACHE;         --不设定缓存
//注意:这里修改序列最大值的时候,只能修改成比原来大的数值
  • 删除序列
  • 语法:
    DROP SEQUENCE 要删除的序列名称
DROP  SEQUENCE  student_seq;
四、ROWID
  • 是一个伪列,系统自动产生。
  • ROWID能唯一标识每一条数据库行记录的物理地址,通过ROWID能够快速定位到一条行记录。
  • ROWID的格式
  • 例如:AAAHjXAAOAAAADaAAA
    数据对象编号 文件编号 块编号 行编号
    AAAHjX AAO AAAADa AAA
  • ROWID使用
SELECT * 
FROM emp
WHERE ROWID = '真实存在的ROWID值';
五、索引概念
  • 是对数据库表中一个或多个列的值进行排序的一种数据库对象
  • 在数据库中,通过索引可以加速对表的查询速度
  • 索引的类型
  • 单列索引
    索引建立在表中的某一列上
  • 复合索引
    索引建立在表中的某几列的组合上
  • 创建索引
  • 自动创建:当有PRIMARY KEY或者UNIQUE约束时,数据库会自动创建索引
  • 手动创建:用户使用创建索引的语法来进行创建
  • 创建索引的语法

CREATE INDEX indexname
ON table(列名)

  • 例子:在emp表的ename上创建索引
CREATE INDEX idx_emp_ename
ON emp(ename);
  • 适合创建索引的情况
  • 表数据量很大
  • 要查询的结果集在2% - 4%之间
  • 经常用来做WHERE条件中的列或者多表连接的列
  • 查询列的数据范围分布很广
  • 查询列中包含大量的NULL值,因为空值不包含在索引中
  • 不适合创建索引的情况
  • 数据量很小的表
  • 在查询中不常用来作为查询条件的列
  • 频繁更新的表
  • 索引列作为表达式的一部分被使用时,比如常查询的条件是SALARY*12,此时的SALARY列上创建索引是没有效果的
  • 查询条件有单行函数时,用不上索引
  • 索引的缺点
  • 占用空间
  • 降低DML的操作速度
  • 删除索引

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

六、相关的数据字典
  • USER_INDEXS:数据字典视图包含索引的名称及唯一性
  • USER_IND_COLUMNS:数据字典视图中包含索引名称、表名以及列名
七、同义词
  • 同义词的概念
  • 同义词(SYNONYM)
    是指向数据库对象(如:表、视图、序列、存储过程等)的数据指针。
  • 使用同义词的好处
    1.可以简化对数据库对象的访问
    2.方便对其他用户表的访问
    3.简化过长的对象的名称
    4.节省大量的数据库空间,对不同用户的操作同一张表没有多少差别
    扩展数据库的使用范围,能够在不同的数据库用户之间实现无缝交互
    5.同义词可以创建在不同一个数据库服务器上,通过网络实现连接
  • 创建同义词

GREATE [ PUBLIC ] SYNONYM 同义词
FOR [schema.]对象名

  • 同义词两种类型
  • 私有(PRIVATE)
    是在指定的方案中创建的,并且只允许拥有它的方案访问。
  • 共有(PUBLIC)
    由PUBLIC方案所拥有,所有的数据库方案都能可以引用他们。
  • 删除同义词
  1. 创建emp表的别名
GREATE SYNONYM s_emp
FOR hr.emp;
  1. 删除同义词
DROP  SYNONYM  s_emp

注意:只有数据库管理员才拥有公有同义词的创建和删除权限

你可能感兴趣的:(序列、索引、同义词)