一、序列的概念及使用
1、概念
序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。
主要用途:生成表的主键值(可作为唯一ID),在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值
2、创建序列
语法:
CREATE SEQUENCE 序列名称
MAXVALUE 最大值
MINVALUE 最小值
INCREMENT BY 步长 START WITH
CYCLE
CACHE 缓存个数
MAXVALUE :可选项,定义序列的最大值
MINVALUE :可选项,定义序列的最小值
INCREMENT BY:步长:可选项,定义序列每次的增加值
START WITH 开:开始值:可选项,定义序列的开始值
CYCLE :可选项,表示当序列增加到最大值或减少到最小值时,重新从开始值继续 CACHE :可选项,表示是否参数序列号预分配,并存储在内存中
3、使用序列
示例:
首先创建一个表
CREATE TABLE mytab(
id NUMBER
name VARCHAR2(50)
CONSTRAINT pk_id PRIMARY KEY(id)
)
此时的数据与原始相比并没有任何区别,但在数据增加时,由于id属于一个主键列,所有可以利用序列来生产id的内容。
INSERT INTO mytab(id,name) VALUE (myseq.nextval,'HELLO');
二、同义词的使用
定义:
- 同义词实质上是指定方案对象的一个别名。通过屏蔽对象的名称和所有者以及对分布式数据库的远程对象提供位置透明性,同义词可以提供一定程度的安全性。同时,同义词的易用性较好,降低了数据库用户的
- SQL 语句复杂度。 同义词允许基对象重命名或者移动,这时,只需对同义词进行重定义,基于同义词的应用程序可以继续运行而无需修改。
- 你可以创建公共同义词和私有同义词。其中,公共同义词属于 PUBLIC
- 特殊用户组,数据库的所有用户都能访问;而私有同义词包含在特定用户的方案中,只允许特定用户或者有基对象访问权限的用户进行访问。
- 同义词本身不涉及安全,当你赋予一个同义词对象权限时,你实质上是在给同义词的基对象赋予权限,同义词只是基对象的一个别名。
三、视图的定义及使用
视图:
视图可以看成是一张虚拟表,由储存的查询组成。视图和真实的数据表一样,都包含若干行列。但是,在视图中并不保存数据,其数据任然来源于视图定义时所使用的数据中,数据库只在数据字典中存储数据的定义信息。
1、视图的定义及使用:
视图依然使用DDL的定义范畴,所以视图的创建需要使用如下语法完成。
CREATE VIEW 视图名称 AS 子句
2、视图更新的限制问题
视图中只包含查询语句的临时数据,并不是真实存在的,可在默认的情况下,创建的视图是可以直接进行修改的。
四、索引的定义及使用
1、定义:
索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低 i/o 次数,从而提高数据访问性能。
2、语法:
创建索引:
CREATE INDEX 索引名称 ON 数据表名称 (字段名称(ASCIDESC),......)REVERSE
其中REVERSE表示建立反向键索引。
3、分类:
- 普通索引 create index 索引名称 on 表名(列名);
- 唯一索引 create unique index 索引名称 on 表名(列名);
- 复合索引 create index 索引名称 on 表名(列名,列名…);
- 反向键索引 create index 索引名称 on 表名(列名) reverse; 应用场景:当某个字段的值为连续增长的值,如果构建标准索引,会形成歪脖子树。这样会增加查询的层数,性能会下降。建立反向键索引,可以使索引的值变得不规则,从而使索引树能够均匀分布。
- 位图索引 create bitmap index 索引名称 on 表名(列名); 使用场景:位图索引适合创建在低基数列上位图索引不直接存储 ROWID,而是存储字节位到 ROWID 的映射 优点:减少响应时间,节省空间占用