您的位置:首页 > 数据库 > Oracle

Oracle(一)--> 数据库对象详解(文字解释,先有个小理解~)

2015-08-27 12:43 483 查看
----数据库对象:逻辑结构的集合 ----
一、同义词:现有对象的别名
/*
作用:
简化SQL语句
隐藏对象的名称和所有者
提供对对象的公共访问
分类:*/
--公有同义词:可以被所有的数据库用户访问,本地对象和公有对象同名时,本地对象优先
create public synonym syn1 for scott.emp;
select * from syn1;
--私有同义词:只能被当前模式访问,且不能与当前模式下的对象同名
create synonym emp1 for scott.emp;
select * from emp1;
/*
同义词创建的条件:在自身的模式下创建私有同义词的话,用户需要具有create synonym系统权限,
在其他的模式创建私有同义词,用户需要具有create any synonym系统权限
公有同义词:用户需要具有create public synonym系统权限
*/
--创建或替换现有的同义词
create or replace synonym emp1 for scott.books;

select * from emp1;
--删除私有同义词
drop synonym emp1;
--删除公有同义词
drop public synonym syn1;
--oracle表中的列实现自增:
--1 sys_guid: global unique identified:全局唯一标识,用于标识一行数据,32位的唯一字符串
select sys_guid() from dual;

二、 序列(与触发器连用)
--序列:用于生成唯一、连续序号的数据库对象
--序列可以是升序的,也可以是降序的
create sequence seq_toys
start with 10
increment by 10
maxvalue 500
minvalue 10
nocycle
cache 10;
/*
通过序列的伪列来访问序列的值
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
*/
create table toys
(toyid int primary key,
toyname char(20),
toyprice float);
insert into toys values(seq_toys.nextval,'熊大',20);
select * from toys;
select seq_toys.CURRVAL from dual;
insert into toys values(seq_toys.nextval,'熊二',21);
--使用ALTER SEQUENCE语句修改序列,不能更改序列的START WITH参数

alter sequence seq_toys increment by 20 maxvalue 1000;

--删除序列
drop sequence seq_toys;

三:视图:视图以经过定制的方式显示来自一个或多个表的数据
/*
视图的优点有:
提供了另外一种级别的表安全性
隐藏了数据的复杂性
简化了用户的SQL命令
隔离基表结构的改变
通过重命名列,从另一个角度提供数据

CREATE [OR REPLACE] [FORCE] VIEW
view_name [(alias[, alias]...)]
AS select_statement
[WITH CHECK OPTION]
[WITH READ ONLY];
or replace:如果视图存在则替换,否则创建新的视图
force:无论基表是否存在都创建视图
with check option:一旦使用该限制,对视图增加或者修改数据的时候,必须满足子查询的条件
with read only:设置视图只读,不能通过视图更改数据,这样的视图具有更高的安全性
*/

CREATE OR REPLACE VIEW v_stu AS
SELECT * FROM students WHERE sdept = 'Art'
WITH CHECK OPTION ;

select * from v_stu;
select * from students;

insert into v_stu values('20030105','July','F',null,'Art',to_date('1996-12-11','yyyy-mm-dd'));

CREATE OR REPLACE VIEW v_stu AS
SELECT * FROM students WHERE sdept = 'Art' ;

--若没有此选项,可以将不符合条件的记录(在试图中)改为视图中不可见记录
insert into v_stu values('20030106','Juli','F',null,'Maths',to_date('1996-12-11','yyyy-mm-dd'));

--使用 ORDER BY 子句创建视图
CREATE OR REPLACE VIEW v_stusorted AS
SELECT * FROM students ORDER BY sdept;

select * from v_stusorted
--force :带有错误的视图
create force view v_temp as select * from t_temp;
select * from v_temp;

create table t_temp (id varchar2(10),name varchar2(20));
insert into t_temp values('1','a');
--视图中可以使用单行函数、分组函数和表达式
---删除视图
drop view v_temp;
--如何保证对视图的修改最后映射到唯一基表数据
--键保留表:基表的主键也是视图的主键

四、索引:与表相关的一个可选结构
/*
主要作用:用以提高 SQL 语句执行的性能
减少磁盘I/O

特点:在逻辑上和物理上都独立于表的数据
Oracle 自动维护索引

创建索引有以下两种方式:
1手工创建
2 自动创建:主键 唯一约束
*/

create index index_stu on students(sname);
--重建索引
--rebuilD 性能优于drop create 语句
alter index index_stu rebuild;
--删除索引
drop index index_stu;
--唯一索引
create unique index index_name on students(sname);

--组合索引:作用如果 SQL 语句的 WHERE 子句中引用
了组合索引的所有列或大多数列,则可以提高检索速度
create index index_ss on students(sage,sdept);

--USER_INDEXES
select * from USER_INDEXES;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: