Oracle 数据库对象_序列_索引_视图_同义词
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
查看序列情况
SELECT s_test.currval FROM dual; SELECT s_test.nextval FROM dual;
删除序列
删除序列使用DROP SEQUENCE语句
例如,删除s_test3序列
DROP SEQUENCE s_test3;
执行效果如下图所示:
索引介绍
使用序列填充主键-2
查询插入结果
SELECT * FROM order_status2;
查询结果如图所示
注意
Hale Waihona Puke 当使用序列填充主键列时,通常应使用NOCACHE避免序列产生的数 值发生遗漏(数值产生遗漏是因为缓存数值时,数据库被关闭)。然 而,使用NOCACHE虽然会降低性能。但是如果不介意主键值产生遗 漏,可以再考虑使用CACHE。
案例
使用默认选项创建序列
CREATE SEQUENCE s_test;
说明
创建序列忽略了其他选项,那么将会使用默认值。 start_num和increment_num都是1
指定相关选项创建序列
CREATE SEQUENCE s_test2 START WITH 10 INCREMENT BY 5 MINVALUE 10 MAXVALUE 20 CYCLE CACHE 2 ORDER;
说明
minimum_num:序列中的最小值,该值必须比start_num小,比 maximum_num也要小 NOMINVALUE:对于序列最小值,不指定最小值,对于升序最小值是1 ,对于降序最小值是-1026 CYCLE:对于序列的值达到最大值或最小值时的处理方法。如果是升序 达到最大值了,那么下一个生成的值将是最小值;如果是降序达到最小值 时,那么下一个值将是最大值。 NOCYCLE:当序列的值达到最大或最小值时,序列将不再产生任何数值 。默认是NOCYCLE。
插入测试数据
INSERT INTO customers VALUES (1, 'John', 'Brown', '01-1月-1965', '800-555-1211'); INSERT INTO customers VALUES (2, 'Cynthia', 'Green', '05-2月-1968', '800-555-1212'); INSERT INTO customers VALUES (3, 'Steve', 'White', '16-3月-1971', '800-555-1213'); INSERT INTO customers VALUES (4, 'Gail', 'Black', NULL, '800-555-1214'); INSERT INTO customers VALUES (5, 'Doreen', 'Blue', '20-5月-1970', NULL);
序列经常用于填充整型的主键列
例如,创建order_status2表
CREATE TABLE order_status2 ( id INTEGER CONSTRAINT order_status2_pk PRIMARY KEY, status VARCHAR2(10), last_modified DATE DEFAULT SYSDATE );
索引是与表关联的可选结构。可以创建索引以加快对表执行SQL语句的速度 。就像书的索引可以帮助我们更快速的查找信息一样,Oracle中的索引也提 供了一种更快地访问表数据的途径。 应该建索引列的特点:
1)在经常需要搜索的列上,可以加快搜索的速度; 2)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; 3)在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; 4)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的 范围是连续的; 5)在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引 的排序,加快排序查询时间; 6)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 不应该建索引列的特点: 第一,对于那些在查询中很少使用或者参考的列不应该创建索引。 第二,对于那些只有很少数据值的列也不应该增加索引。 第三,对于那些定义为blob数据类型的列不应该增加索引。 第四,当修改性能远远大于检索性能时,不应该创建索引。
– 出于性能原因,可以将索引存储的表空间与实际表所存储的表空间分开
。管理员应该为表和索引创建不同的表空间。
案例-1
现有customer表
CREATE TABLE customers ( customer_id INTEGER CONSTRAINT customers_pk PRIMARY KEY, first_name VARCHAR2(10) NOT NULL, last_name VARCHAR2(10) NOT NULL, dob DATE, phone VARCHAR2(12) );
创建序列-3
可以使用CREATE SEQUENCE语句来创建序列,语法如下:
CREATE SEQUENCE sequence_name [START WITH start_num] [INCREMENT BY increment_num] [ { MAXVALUE maximum_num | NOMAXVALUE } ] [ { MINVALUE minimum_num | NOMINVALUE } ] [ { CYCLE | NOCYCLE } ] [ { CACHE cache_num | NOCACHE } ] [ { ORDER | NOORDER } ];
创建序列
CREATE SEQUENCE s_order_status2 NOCACHE;
插入数据
INSERT INTO order_status2(id, status, last_modified) VALUES (s_order_status2.nextval, 'PLACED', '01-1月-2006'); INSERT INTO order_status2 (id, status, last_modified) VALUES (s_order_status2.nextval, 'PENDING', '01-2月-2006');
修改序列
修改序列可以使用ALTER SEQUENCE语句进行修改。修 改有一些限制如下:
初始值不能修改 序列的最小值不能大于当前序列的值 序列的最大值不能小于当前序列的值 修改s_test序列的增长值为2
ALTER SEQUENCE s_test INCREMENT BY 2;
例如
说明
UNIQUE:意味着索引列中的值必须是唯一的 index_name:索引的名称 table_name:需要加索引的表名
column_name:需要加索引的列。可以在多列上加索引(这样的索引 称为复合索引)
tab_space:存储索引的表空间。如果不指定的话,那么索引将存储 在用户默认的表空间下
索引
索引学习部分内容包括
创建B-Tree索引(默认类型) 创建函数索引 查看索引信息
修改索引
删除索引 创建位图索引
创建B-Tree索引
可以使用CREATE INDEX创建B-Tree索引,语法如下
CREATE [UNIQUE] INDEX index_name ON table_name(column_name[, column_name ...]) TABLESPACE tab_space;
说明
sequence_name:序列的名称 start_num:序列开始的第一个整数,默认从1开始 increment_num:每次增长的数值 maximum_num:序列能够增长到的最大值 NOMAXVALUE:对于序列最大值,不指定最大值,对于升序最大值是 1027,对于降序是-1
CREATE SEQUENCE sequence_name [START WITH start_num] [INCREMENT BY increment_num] [ { MAXVALUE maximum_num | NOMAXVALUE } ] [ { MINVALUE minimum_num | NOMINVALUE } ] [ { CYCLE | NOCYCLE } ] [ { CACHE cache_num | NOCACHE } ] [ { ORDER | NOORDER } ];
查询结果如下图所示:
使用序列-1
创建序列之后,序列可以产生一系列的数值。可以通过 currval和nextval来访问它们来获取当前值和下一个值。
例如
SELECT s_test.nextval
FROM dual;
在s_test序列中的第一个值是1,一旦序列被初始化之后,就可以 从序列中获取当前值
创建序列-2
可以使用CREATE SEQUENCE语句来创建序列,语法如下:
CREATE SEQUENCE sequence_name [START WITH start_num] [INCREMENT BY increment_num] [ { MAXVALUE maximum_num | NOMAXVALUE } ] [ { MINVALUE minimum_num | NOMINVALUE } ] [ { CYCLE | NOCYCLE } ] [ { CACHE cache_num | NOCACHE } ] [ { ORDER | NOORDER } ];
数据库操作与管理语言 Oracle SQL
数据库对象
本章目标
创建序列
创建索引 创建视图
序列Sequence
序列是一个数据库对象,用于生成一系列的整数。
学习内容包括
创建序列 查询序列的信息 使用序列 修改序列 删除序列
创建序列-1
可以使用CREATE SEQUENCE语句来创建序列,语法如下:
索引的特点:
优点:
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意 义。
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排 序的时间。
SELECT s_test.currval FROM dual;
使用序列-2
s_test2序列的初始值是10,每次增加5,最大值为20
执行3次
SELECT s_test2.nextval FROM dual;
说明
由于设置了循环,当达到最大值20时, 又会重新从10开始进行循环
使用序列填充主键-1
说明
cache_num:保存在内存中缓存整数的数量,默认缓存的数量是20,最 小的缓存数是2,最大的缓存数是CEIL(maximum_num minimum_num)/ABS(increment_num) NOCACHE:表示没有缓存数字 ORDER:保证整数的请求顺序是按照生成顺序得到的。 NOORDER:不保证整数的请求顺序是按照生成顺序得到的。默认值。
创建降序的序列
CREATE SEQUENCE s_test3 START WITH 10 INCREMENT BY -1 MINVALUE 1 MAXVALUE 10 CYCLE CACHE 5;
查看序列的信息
可以通过查看user_sequences视图了解序列的信息
查看序列信息
SELECT * FROM user_sequences ORDER BY sequence_name;
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
缺点:
第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增 加。 第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还 要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维 护,这样就降低了数据的维护速度。