数据库对象
数据库对象简介
Oracle 数据库对象又称模式对象
数据库对象是逻辑结构的集合,最基本的数据库对象是表
其他数据库对象包括:
同义词(对象别名)
同义词是现有对象的一个别名。
简化SQL语句
- 隐藏对象的名称和所有者
- 提供对对象的公共访问
同义词共有两种类型:
3. 公有同义词可被所有的数据库用户访问。
4. 私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
实例
--同义词
select * from emp;
--创建或创建(存在就替换不存在就创建)私有同义词,对象的别名。私有的别名只能本用户使用,别的用户无法访问。
create or replace synonym syn_emp for emp;
select * from syn_emp;
--创建或创建(存在就替换不存在就创建)公共同义词,对象的别名。公有的别名可以被别的用户访问.
create or replace public synonym pub_syn_emp for emp;
select * from pub_syn_emp;
--删除同义词
drop synonym syn_emp;
drop public synonym pub_syn_emp;
序列
序列是用于生成唯一、连续序号的对象
序列可以是升序的,也可以是降序的
使用CREATE SEQUENCE语句创建序列
访问序列
实例
--序列,生成唯一,连续的序号,一般用作主键编号,默认从1~999999999999999,间隔1
create sequence seq_test;
--查询序列的下一个值
select seq_test.nextval from dual;
--查询序列当前值
select seq_test.currval from dual;
更改序列
视图
视图以经过定制的方式显示来自一个或多个表的数据
视图可以视为“虚拟表”或“存储的查询”
创建视图所依据的表称为“基表”
视图的优点有:
- 提供了另外一种级别的表安全性
- 隐藏的数据的复杂性
- 简化的用户的SQL命令
- 隔离基表结构的改变
- 通过重命名列,从另一个角度提供数据
不能够对视图进行任何的修改,只能通过视图间接的对基表进行修改详情可看(触发器的instead of模式)
创建视图
创建视图的语法:
CREATE [OR REPLACE] [FORCE] VIEW
view_name [(alias[, alias]…)]
AS select_statement
[WITH CHECK OPTION]
[WITH READ ONLY];
实例
--视图(不存放真实的数据,引用原来表的数据)
create or replace view emp_view as select e.employee_id,e.first_name,e.salary,e.department_id from emp e;
视图的使用
CREATE OR REPLACE VIEW ord_ven AS
SELECT * FROM vendor_master ORDER BY venname;
实例
--视图跟表的使用方式一样
--创建视图,查询各个岗位的平均工资
create or replace view sal_view as select e.job_id,round(avg(e.salary)) salary from emp e group by e.job_id
select * from sal_view;
--创建视图,查询各个部门的平均工资,然后显示部门名称
create or replace view sal_dep_view as
select e.department_id,round(avg(e.salary)) avg_sal ,d.department_name
from emp e ,dep d
where e.department_id = d.department_id
group by e.department_id,d.department_name;
select * from sal_dep_view s where s.department_name='IT';
视图中的函数
视图中可以使用单行函数、分组函数和表达式
CREATE VIEW item_view AS
SELECT itemcode, LOWER(itemdesc) item_desc
FROM itemfile;
使用DROP VIEW语句删除视图
SQL> DROP VIEW toys_view;
索引
简单的说索引的值是加载到内存的,索引生效则从内存中读取数据(很快)。
不使用索引则是全表查询,从磁盘中用IO流的方式读取数据(很慢)。
索引是与表相关的一个可选结构
用以提高 SQL 语句执行的性能
减少磁盘I/O
使用 CREATE INDEX 语句创建索引
在逻辑上和物理上都独立于表的数据
Oracle 自动维护索引
索引分类
索引有各种类型,除了标准索引外,还有一些特殊类型的索引:
创建标准索引
SQL> CREATE INDEX idx_student_id student(id)
重建索引
内存中索引失效让其刷新索引重新生效
--重建索引(内存中索引失效让其刷新索引重新生效),刷新内存,更新索引
alter index idx_emp_salary rebuild;
删除索引
DROP INDEX item_index;
唯一索引
唯一索引确保在定义索引的列中没有重复值
Oracle 自动在表的主键列上创建唯一索引
使用CREATE UNIQUE INDEX语句创建唯一索引
--创建唯一索引 ,作用在值唯一的列上,比如主键,身份证号
create unique index idx_emp_employee_id on emp(employee_id);
反向键索引
反向键索引反转索引列键值的每个字节
通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上
创建索引时使用REVERSE关键字
--创建反向索引,作用在连续增长的列,比如使用序列生成的值
create index idx_emp_department_id on emp(department_id) reverse;
去除反向索引
ALTER INDEX rev_index REBUID NOREVERSE;
位图索引
低基数列就是值某个字段能够产生不同的值是少数的,例如性别只有(男,女)、学历(小学,中学,大学,)。这些属性只能产生有限个数值。
位图
位图索引适合创建在低基数列上
位图索引不直接存储ROWID,而是存储字节位到ROWID的映射
减少响应时间
节省空间占用
--位图索引,作用在低基数列,比如性别,学历,职位,职称
create bitmap index idx_student_sex on student(sex)
基于函数的索引
基于一个或多个列上的函数或表达式创建的索引
表达式中不能出现聚合函数
不能在LOB类型的列上创建
创建时必须具有 QUERY REWRITE 权限
CREATE INDEX lowercase_idx ON toys (LOWER(toyname));
SELECT toyid
FROM toys
WHERE LOWER(toyname)=‘doll’
总结
同义词是现有数据库对象的别名
序列用于生成唯一、连续的序号
视图是基于一个或多个表的虚拟表
索引是与表相关的一个可选结构,用于提高 SQL 语句执行的性能
索引类型有标准索引、唯一索引、反向键索引、位图索引和基于函数的索引
索引组织表基于主键访问数据