视图:
/*
视图:经过以制定的方式显示来自一个或多个表的数据
可以视为"虚拟表"或"存储的查询"
创建视图所依据的表为基表
优点:1.提供了另外一种级别的安全性;
2.隐藏数据的复杂性;
3.简化用户的sql语句;
4.隔离基表的变化
5.通过重命名列,从另外一个角度提供对数据的访问。
*/
-- 视图,关键字 view as
create or replace view emp_view -- 要有创建view的权限
as
select ename,sal,dname from emp,dept where emp.deptno = dept.deptno;
-- 从视图中查询
select * from emp_view;
-- 删除视图
drop view emp_view;
/*
连接视图查询与多表连接查询相似,因为可以将视图当做虚拟表,只是有一些限制:
1.只能修改一个底层的基表
2.如果修改违反了基表的约束条件,则无法更新视图
3.如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
4.如果视图包含伪列或表达式,则将无法更新视图
*/
索引:
/*
索引:索引是与表相关的一个可选结构
创建索引的优点:1.减少磁盘的I/O
2.能提高查询语句的执行能力
注意:建立不必要的索引会造成写入数据的性能开销以及磁盘空间的浪费
*/
-- 1.创建标准索引
create index emp_index on emp(ename); -- 注意不能用or replace
alter index emp_index rebuild; -- 重构索引
drop index emp_index; -- 删除索引
-- 创建唯一索引
create unique index dept_uniqueIndex on dept(dname);
drop index dept_uniqueIndex;
同义词
/*
同义词:现有对象的一个别名;
优点:1.简化sql;2.隐藏了对象的名称和所有者;3.提供对对象的公共访问
*/
-- 创建私有同义词,只能在模式内访问,且不能与当前对象同名
create or replace synonym em for emp;
select * from em;
drop synonym em;
--创建公有的同义词,可以被所有的数据库用户访问,当然别的用户要有访问权限
create or replace public synonym pub_emp for emp; --需要授权
drop public synonym pub_emp; -- 需要授权
/*
序列:用于生成唯一,连续序号的对象,可以使升序,也可以使降序
*/
create sequence my_seq -- 此处与索引一样不能用 or replace
start with 1
increment by 1
maxvalue 1000
minvalue 1
cycle
cache 20
-- 查询序列
select my_seq.nextval from dual; -- 序列下一个值
select my_seq.currval from dual; -- 序列当前值
create table person(
pid number primary key,
pname varchar2(20)
)
-- 人工创建自增
insert into person(pid,pname) values(my_seq.nextval,'ysjian');
insert into person values(my_seq.nextval,'ysjian');
select * from person;