同义词:现有对象的一个别名
- 简化sql语句
- 隐藏对象的名称和所有者
- 提供对象的公共访问
- 可分为私有同义词和公有同义词
给用户赋予创建同义词的权限(在System账户下授权)
grant create synonym to 用户名; |
创建同义词(在scott用户下创建时)
create synonym a for emp ; 创建私有同义词 a |
create public synonym b for emp; 创建公有同义词b |
删除同义词
drop synonym a; 删除创建的私有同义词 |
drop public synonym b; |
序列:用于生成唯一,连续序号的对象。序列可以是升序也可以是降序
参数说明:
- maxvalue必须大于或等于start_num ,必须大于minvalue
- increment by:该值默认为1,绝对值必须小于(maxvalue-minvalue)
创建序列(序列名为t_table,不能使用or replace)
create sequence t_table start with 1 起始值为1 increment by 1 步值为1 maxvalue 20 最大值为20 minvalue 1 最小值为1 nocycle/cycle 数字不循环或者循环 cache 指定保留在内存中的整数的个数 order/noorder ; 确保按照请求秩序生成相应的名称 |
获得序列当前值
select t_table.currval from dual; |
获得下一个序列号
select t_table.nextval from dual; |
修改序列
注意:
- start with选出项不能被修改
- 不能修改序列的值的初值
- 序列的最小值不能小于当前值
- 序列的最大值不能大于当前值
alter sequence t_table maxvalue 15; |
alter sequence t_table cycle; |
alter sequence t_table order; |
删除序列
drop sequence t_table; |
案例:(使用序列填充主健)
create table p_table( stu_id number primary key, stu_name not null; ); insert into p_table values(t_table.nextval,’test’); 每次调用一次,值就改变一次 |
视图:经过定制的方法显示来自一个或多个表的数据。虚拟表可视为“虚拟表”或者“存储的查询”,创建视图所依据的表称为“基表”
优点:
- 实现数据的安全性,简化sql语句
- 维护数据的独立性,视图可以从多个表检索数据
- 用户可以通过简单的查询从复杂的查询中得到结果
- 对于相同的数据可产生不同的视图
赋予用于创建视图的权限
grant create view to scott; |
案列:创建简单视图(只从单表里获取数据,不包含函数和数据组,视图名view_num)
create or replace force view view_num as select *from emp; 注意:force:适用于当基表不存在的时候,仍然可以创建视图,但是视图不可以查看数据
|
案列:创建视图并定义check约束(定义check约束chk_view20.只能修改除了where条件之外的其他列)
create or replace force view view_num as select ename,empno,deptno,job from emp where deptno=10 with check option constraint chk_view20; |
案列:建立只读视图(对10部门的数据只读)
create or replace force view view_num as select *from emp where deptno=10 with read only; |
案例:建立复杂视图(每个岗位平均薪水,薪水总和,最多薪水,最少薪水)
create view view_all as select job 职位,avg(nvl(sal,0)) 平均薪水,sum(sal) 薪水总和, max(sal) 最多薪水,min(sal) 最少薪水 from emp group by job; |
案列:建立连接视图
create or replace view view_num as select e.deptno,e.empno,e.ename,d.dname from emp e,dept d where e.deptno=d.deptno; |
视图的定义原则:
1.视图的查询可以使用复杂的select语句,包括连接/分组查询,子查询
2.在没有with check option和read only情况下,查询中不能使用order by子句
3.如果没有为check option约束命名,系统会自动为之命名 sys_cn;
4.or replace选项可以不删除原始图便可更改重建,或重新授予对象权限
修改视图限制:
- 只能修改一个底层的基表
- 如果修改违反了基表的约束条件,则无法更新视图
- 如果视图中包含连接符(||),distinct关键字、聚合函数或group by子句,则无法更新视图
- 如果视图中包含伪列或表达式,则无法更新视图
重新编译视图
alter view view_num compile; |
修改视图的约束
alter view view_num drop constraint chk_view20; |
删除视图
drop view view_num; |
索引:
- 为了提高sql语句的执行能力,和rowid有关
- 在创建表时,会默认为每个数据建立一个隐含的字段(rowid)
- 在向表中插入数据的时,系统自动为每条记录分配一格rowid,利用rowid快速的定位到记录
- 类型:唯一索引、组合索引、方向键索引、位图索引、基于函数的索引
创建索引:
create index index_name on table_name(col_name); |
create index idx_emp_ename on emp(ename); |
删除索引
drop index idx_emp_ename; |