数据库对象简介
Oracle 数据库对象又称模式对象。
数据库对象是逻辑结构的集合,最基本的数据库对象是表。
序列
序列是用于生成唯一、连续序号的对象。
序列可以是升序的,也可以是降序的。
序列创建
SQL> CREATE SEQUENCE toys_seq
START WITH 10 -- 指定起始值
INCREMENT BY 10
MAXVALUE 2000
MINVALUE 10
NOCYCLE
CACHE 10; -- 内存中预先分配的序号数
SQL> CREATE SEQUENCE seqa START WITH 1000 INCREMENT BY 2;
序列操作
通过序列的伪列来访问序列的值
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
SQL> SELECT seqa.CURRVAL FROM dual;
更改序列
注意:不能修改序列的start with 数值
SQL> ALTER SEQUENCE seqa MAXVALUE 5000 CYCLE;
删除序列
SQL> DROP SEQUENCE seqa;
同义词
同义词是现有对象的一个别名
简化SQL语句
隐藏对象的名称和所有者,开发者可以不考虑具体对象名
提供对对象的公共访问,提高安全性
同义词共有两种类型:
公有同义词可被所有的数据库用户访问。
私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
同义词操作
创建同义词
只有DBA用户才能建立同义词
SQL> CREATE SYNONYM myemp FOR scott.emp;
SQL> CREATE PUBLIC SYNONYM myemp2 FOR scott.emp;
访问同义词
私有同义词无论授权与否一般(除DBA之外)只能当前用户模式访问
公共同义词只有得到同义词所对应对象的select授权才能访问
SQL> GRANT SELECT ON myemp(同义词) TO xm(用户名);
SQL> SELECT * FROM myemp;
修改同义词
SQL> CREATE OR REPLACE SYNONYM myemp FOR SCOTT.dept;
删除同义词
SQL> DROP SYNONYM myemp;
SQL> DROP PUBLIC SYNONYM myemp2;
视图
视图以经过定制的方式显示来自一个或多个表的数据,可以视为“虚拟表”或“存储的查询”
视图本身不存储数据
创建视图所依据的表称为“基表”
视图的优点有:
提供了另外一种级别的表安全性
隐藏数据的复杂性
简化用户查询SQL
隔离基表结构的改变
通过重命名列,从另一个角度提供数据
创建视图
创建视图的语法:
CREATE [OR REPLACE] [FORCE] VIEW
view_name [(alias[, alias]...)]
AS select_statement
[WITH CHECK OPTION]--检查视图
[WITH READ ONLY];--只读视图
CREATE VIEW v_emp AS
SELECT empno,ename,job FROM emp
WHERE deptno=10
[WITH CHECK OPTION CONSTRAINT chk_pv]
[with read only];
删除视图:drop view
创建简单的视图
CREATE VIEW myview AS
SELECT * FROM emp WHERE job='MANAGER';
创建带有聚合函数的视图
CREATE VIEW myviewa AS SELECT deptno,sum(sal) totsal FROM emp GROUP BY deptno;
创建从多张表连接形成的视图
CREATE VIEW myviewb AS SELECT ename,job,dname,loc FROM emp e,dept d WHERE e.deptno=d.deptno;
注意:
--创建视图权限
grant create view to scott;
--授予查询权限
grant select any table to scott;
--授予权限
grant select any dictionary to scott;
视图上的DML语句
在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE
视图上的DML语句有如下限制:
只能修改一个底层的基表
如果修改违反了基表的约束条件,则无法更新视图
如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
如果视图包含伪列或表达式,则将无法更新视图
视图更改
UPDATE myview SET sal=sal+20;--成功
UPDATE myviewa SET totsal=10000 WHERE deptno=10;聚合函数
UPDATE myviewb SET job=‘MANAGER’ WHERE ename=‘SMITH’;
SQL> INSERT INTO myview(empno,ename,job,deptno) VALUES(2222,'rose','CLERK',10);
SQL>SELECT * FROM myview;
SQL>--为什么插入数据看不到?--实际已添加至基表,但被职位限制不显示了
SQL> DROP VIEW myview
SQL>CREATE VIEW myview AS SELECT * FROM emp WHERE job=‘MANAGER’ with check option;--再次添加会报错,因为已限制只能添加'manager'
索引
索引是与表相关的一个可选结构
用以提高 SQL 语句执行的性能
减少磁盘I/O
使用 CREATE INDEX 语句创建索引
在逻辑上和物理上都独立于表的数据
Oracle 自动维护索引
索引有各种类型,除了标准索引外,还有一些特殊类型的索引:
索引管理
索引创建
通过主键、唯一约束等自动建立
手动创建
CREATE INDEX index_emp ON emp(hiredate)
SELECT* FROM emp WHERE hiredate>to_date(‘19810101’,’yyyymmdd’)
重建索引
ALTER INDEX index_emp REBUILD;
删除索引
DROP INDEX index_emp ;
索引一览
唯一索引
Oracle 自动在表的主键列上创建唯一索引
CREATE UNIQUE INDEX
组合索引
是在表的多个列上创建的索引
反向键索引
通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上
创建索引时使用REVERSE关键字,基于B树优化
位图索引
通常建立低基数列上,列值相对固定
CREATE BITMAP INDEX
本章小结
同义词是现有数据库对象的别名
序列用于生成唯一、连续的序号
视图是基于一个或多个表的虚拟表
索引是与表相关的一个可选结构,用于提高 SQL 语句执行的性能。索引类型有标准索引、唯一索引、反向键索引、位图索引和基于函数的索引
网友评论