序列
概念:序列是按照一定规则能自动增加/减少数字的一种数据库对象。
用法:通常用序列自动生成主键值。
语法:
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是默认选项
NEXTVAL和CURRVAL伪列
CURRVAL:表示序列返回的 当前值;
NEXTVAL:表示序列返回的下一个值;
注:
CURRVAL在被引用之前,必须先使用NEXTVAL来产生一个序列值;
可用语句序列名.CURRVAL或序列名.NEXTVAL来访问序列;
以下情况不能使用NEXTVAL和CURRVAL:
在视图的SELECT列表中
包含DISTINCT关键字的SELECT语句中
含有GROUP BY, HAVING, ORDER BY子句的SELECT语句中
SELECT, DELETE, UPDATE 语句的子查询中
含有DEFAULT表达式的CREATE TABLE、ALTER TABLE语句中
序列的创建及使用
例如:
创建序列student_seq:CREATE SEQUENCE student_seq//创建序列名为student_seq
START WITH 10000 //从10000开始
INCREMENT BY 1;//每次增长1
使用序列student_seq生成student表中sid列插入值:INSERT INTO student
VALUES (student_seq.NEXTVAL, ‘Scott’, ‘Computer Science’, 11);
查看student_seq序列当前值:SELECT student_seq.CURRVAL FROM dual;
修改序列
和创建序列一样,不过在前面加了关键词ALTER
ALTER SEQUENCE test_seq
INCREMENT BY 4 ——序列每次增加4
MAXVALUE 1000 ——序列最大值1000
NOCACHE;——不设定缓存删除序列
DROP SEQUENCE [schema.]sequencename;
ROWID
功能:快速定位记录,使用ROWID检索及操作数据,效率最快。
索引
概念:是对数据库表中一个或多个列的值进行排序的一种数据库对象。
功能:可以加速对表的查询速度;
单列索引:索引建立在表中的某一列上
复合索引:索引建立在表中某几列的组合上创建索引
CREATE INDEX indexname
ON table (column[, column]…);适合创建索引的情况
表数据量很大
要查询的结果集在2%-4%左右
经常用来做WHERE条件中的列或者多表连接的列
查询列的数据范围分布很广
查询列中包含大量的NULL值,因为空值不包含在索引中
不适合创建索引的情况
数据量很小的表
在查询中不常用来作为查询条件的列
频繁更新的表
索引列作为表达式的一部分被使用时,比如常查询的条件是SALARY*12,此时在SALARY列上创建索引是没有效果的
查询条件中有单行函数时,用不上索引
索引缺点
占用空间
降低DML的操作速度;
删除索引
DROP INDEX index;
同义词
概念:是指向数据库对象(如:表、视图、序列、存储过程等)的数据库指针。
同义词的创建
CREATE [PUBLIC] SYNONYM 同义词
FOR [schema.]对象名;同义词的删除
CREATE SYNONYM s_emp
FOR hr.employees;