1) Oracle 数据库对象又称模式对象;数据库对象是逻辑结构的集合,最基本的数据库对象是表。
其他数据库对象包括:同义词,索引,序列,视图。
1.1 同义词是现有对象的一个别名。
简化SQL语句;隐藏对象的名称和所有者;提供对对象的公共访问。
同义词共有两种类型:私有同义词和公有同义词。
私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
私有同义词语法:
CREATE SYNONYM emp FOR SCOTT.emp;--其中emp是SCOTT.emp 的别名,SCOTT 是模式名,emp是表明
公有同义词语法:
CREATE PUBLIC SYNONYM emp_syn FOR SCOTT.emp;--其中emp_syn 是 同义词名称
创建或替换现有的同义词:
CREATE OR REPLACE SYNONYM emp_syn FOR SCOTT.emp;-- OR REPLACE 是替换现有的同义词
删除同义词:
SQL DROP SYNONYM emp;
SQL DROP PUBLIC SYNONYM emp_syn;
1.2 序列
1.2.1序列是用于生成唯一、连续序号的对象;序列可以是升序的,也可以是降序的。
使用CREATE SEQUENCE语句创建序列:
SQL CREATE SEQUENCE toys_seq
START WITH 10
INCREMENT BY 10
MAXVALUE 2000
MINVALUE 10
NOCYCLE
CACHE 10;
注意:指定内存中预先分配的序号数 。
1.2.2访问序列:
通过序列的伪列来访问序列的值
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
SQL INSERT INTO toys (toyid, toyname, toyprice)
VALUES ( toys_seq.NEXTVAL, ‘TWENTY’, 25);
SQL INSERT INTO toys (toyid, toyname, toyprice)
VALUES ( toys_seq.NEXTVAL, ’MAGIC PENCIL’, 75);
--其中toys_seq.NEXTVAL指定序列的下一个值
SQL SELECT toys_seq.CURRVAL FROM dual;-- 检索序列的当前值
1.2.3更改和删除序列
使用ALTER SEQUENCE语句修改序列,不能更改序列的START WITH参数
SQL ALTER SEQUENCE toys_seq MAXVALUE 5000 CYCLE;
使用DROP SEQUENCE语句删除序列
SQL DROP SEQUENCE toys_seq;
1.3视图
1.3.1视图以经过定制的方式显示来自一个或多个表的数据;
视图可以视为“虚拟表”或“存储的查询”;
创建视图所依据的表称为“基表。”
视图的优点有:
提供了另外一种级别的表安全性;
隐藏的数据的复杂性;
简化的用户的SQL命令;
隔离基表结构的改变;
通过重命名列,从另一个角度提供数据。
1.3.2创建视图的语法:
CREATE [OR REPLACE] [FORCE] VIEW
view_name [(alias[, alias]...)]
AS select_statement
[WITH CHECK OPTION]
[WITH READ ONLY];
CREATE VIEW stud_view(是图表)
AS SELECT studno, studname, subno(字段)
FROM Stud_details(原始表);
使用 WITH CHECK OPTION 选项创建视图
CREATE OR REPLACE VIEW pause_view AS
SELECT * FROM order_master WHERE ostatus = 'p'
WITH CHECK OPTION CONSTRAINT chk_pv;
使用 ORDER BY 子句创建视图
CREATE OR REPLACE VIEW ord_ven AS
SELECT * FROM vendor_master ORDER BY venname;
创建带有错误的视图
CREATE FORCE VIEW ven AS
SELECT * FROM venmaster;
创建外联接视图
CREATE VIEW ven_ord_outj_view AS
SELECT vm.vencode, venname, orderno, odate, ostatus
FROM vendor_master vm, order_master om
WHERE vm.vencode = om.vencode(+);
或者
SELECT vm.vencode, venname, orderno, odate, ostatus
FROM vendor_master vm LEFT OUTER JOIN order_master om
ON vm.vencode = om.vencode;
1.3.3视图上的DML语句
在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE
视图上的DML语句有如下限制:
只能修改一个底层的基表;
来源:( - 数据库对象_一土林夕_新浪博客如果修改违反了基表的约束条件,则无法更新视图;
如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图;
如果视图包含伪列或表达式,则将无法更新视图。
视图中可以使用单行函数、分组函数和表达式:
CREATE VIEW item_view AS
SELECT itemcode, LOWER(itemdesc) item_desc
FROM itemfile;
使用DROP VIEW语句删除视图
SQL DROP VIEW toys_view;
1.4索引
索引有各种类型,除了标准索引外,还有一些特殊类型的索引:
索引的类型:唯一索引、位图索引、组合索引、基于函数的索引、反向键索引。
创建标准索引:
SQL CREATE INDEX item_index ON itemfile (itemcode)
TABLESPACE index_tbs;
重建索引:
SQL ALTER INDEX item_index REBUILD;
删除索引:
SQL DROP INDEX item_index;
1.4.1唯一索引
唯一索引确保在定义索引的列中没有重复值
Oracle 自动在表的主键列上创建唯一索引
使用CREATE UNIQUE INDEX语句创建唯一索引:
SQL CREATE UNIQUE INDEX item_index
ON itemfile (itemcode);
1.4.2组合索引
组合索引是在表的多个列上创建的索引;
索引中列的顺序是任意的;
如果 SQL 语句的 WHERE 子句中引用了组合索引的所有列或大多数列,则可以提高检索速度。
SQL CREATE INDEX comp_index
1.4.3反向键索引
反向键索引反转索引列键值的每个字节;
通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上;
创建索引时使用REVERSE关键字:
SQL CREATE INDEX rev_index
ON itemfile (itemcode) REVERSE;
SQL ALTER INDEX rev_index REBUID NOREVERSE;
1.4.4位图索引
位图索引适合创建在低基数列上;
位图索引不直接存储ROWID,而是存储字节位到ROWID的映射;
减少响应时间;
节省空间占用。
语法:
SQL CREATE BITMAP INDEX bit_index
ON order_master (orderno);
1.4.5索引组织表
索引组织表的数据存储在与其关联的索引中;
索引中存储的是行的实际数据,而不是ROWID;
基于主键访问数据;
CREATE TABLE 命令与 ORGANIZATION INDEX 子句一起用于创建索引组织表:
SQL CREATE TABLE ind_org_tab (
vencode NUMBER(4) PRIMARY KEY,
venname VARCHAR2(20)
)
ORGANIZATION INDEX;
普通表与索引组织表的比较:
普通表索引组织表
ROWID 唯一地标识行 主键唯一地标识行
隐式的 ROWID 列 没有隐式的 ROWID 列
基于 ROWID 的访问 基于主键的访问
顺序扫描返回所有行 完全索引扫描返回所有行,并按主键顺序排列
支持分区 不支持分区
1.4.6基于函数的索引
基于一个或多个列上的函数或表达式创建的索引
表达式中不能出现聚合函数
不能在LOB类型的列上创建
创建时必须具有 QUERY REWRITE 权限
SQL CREATE INDEX lowercase_idx
ON toys (LOWER(toyname));
SQL SELECT toyid FROM toys
WHERE LOWER(toyname)='doll';
1.4.7索引中的分区
可以将索引存储在不同的分区中
与分区有关的索引有三种类型:
局部分区索引 - 在分区表上创建的索引,在每个表分区上创建独立的索引,索引的分区范围与表一致;
全局分区索引 - 在分区表或非分区表上创建的索引,索引单独指定分区的范围,与表的分区范围或是否分区无关;
全局非分区索引 - 在分区表上创建的全局普通索引,索引没有被分。
1.4.8获取索引的信息
与索引有关的数据字典视图有:
USER_INDEXES - 用户创建的索引的信息;
USER_IND_PARTITIONS - 用户创建的分区索引的信息;
USER_IND_COLUMNS - 与索引相关的表列的信息。
SQL SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME
FROM USER_IND_COLUMNS
ORDER BY INDEX_NAME, COLUMN_POSITION;
来源:( - 数据库对象_一土林夕_新浪博客
温馨提示:内容为网友见解,仅供参考