广州明生医药有限公司


Oracle初学者笔记(六)-Oracle的数据库对象

网络编程 Oracle初学者笔记(六)-Oracle的数据库对象 06-22

Oracle的数据库对象
    
  同意词
数据库对象的替换名称,优点:
   简化SQL语句;
   隐藏对象的名称和所有者;
   为分布式数据库的远程对象提供了位置透明性;
   提供对对象的公共访问;
//如果在scott账号下的某个权限不足的话,可以通过下面的一系列操作来
完成:
 conn system/[password] as sysdba;
 grant create synonym to scott;
 conn scott/tiger;
 
 创建:
 create [(public)] synonym [别名] for tablename;    
 删除:
 drop synonym [别名];                              
        数据字典:user_synonyms;
公有同意词的意义就是所有用户都可以访问,别人访问的时候不必再用用户.表名
来访问;比如system为scott.emp创建了employee别名,scott和其他用户都可以查询
这个别名,但是如果试图删除或者做其他操作,就会发现,即使是scott表也看不见
这个别名表,因为这个别名是system的;
  序列
能够自动产生连续唯一值的数据库共享对象;
序列用于为主键提供值;
创建序列语句:
//用create创建的,就可以用drop删除;
create sequence seq
 [increment by n]
 [start with n]
 [{maxvalue n|nomaxvalue}]
 [{minvalue n|nominvalue}]
 [{cycle|nocycle}]
 [{cache n|nocache}]   //在缓冲区存储生成的值;
属性:其实是函数
 nextval 返回下一个可用的值;初始化序列值;
 currval 获取当前的序列值;
数据字典:user_sequences;
序列是个什么东西呢?它就是在数据库中创建的一个供其他表
插入或者操作表数据的时候的一个方便的工具而已;

  视图
视图显示了表中的一部分数据;
虚拟表,不实际存在数据;
好处:
 提供了另外一种级别的安全性,也就是说我不告诉用户基表是
 谁,就告诉一个可以让用户查询知道的视图;
 隐藏数据的复杂性;视图的列可以首先从基表处拼合一个简单的列;
 将应用程序与基表定义的修改隔离开来;
 从另一个角度提供数据;
创建:create or replace view ....
order by....按照特定的顺序对行进行排列;
force 选项可用于创建带有错误的视图;
//你一直苦于当有一个SQL语句打错了的时候,如果
用r,/只能重新执行,无法直接只修改错误的地方而需要
全部重打;下面就有一个非常好用的方法来解决这个问题:
 执行一句sql语句;

ed;//将会把上一行的sql语句写入afiedt.buf中;
 修改afiedt.buf中你认为错误的地方,保存;
 在sql-plus中使用r,/,将会执行修改后的afiedt.buf
 中的sql语句 ;
所有的子查询结果都可以放在视图中,这就是为什么说视图简化了
表的复杂性,简化了sql的原因;

子查询可以排序,可以xxxx,所以得到的视图也可以是被排序后的,
被xxxx后的;

Oracle没有top关键字,为了得到前几行数据,我们:
 Oracle中有两个隐藏的列:
  rowid,对每一个行的唯一的物理映射的标识,
  如果用具体的rowid来检索,速度飞快;
  rownum,一个输出序列;如果想要检索出前5条的话,
  就用where rownum<=5;
  举个例子:create or replace view v_sal as
    select ename as 姓名,sal as 工资
    from emp order by sal;
     select * from v_sal where rownum<=10;
      这个例子将得到工资最低的前十个人;
视图更强大的功能是联接视图;
数据字典:user_views
删除视图:drop view
比如:
 >create or replace view v_union as
 select * from temp union all select * from temp1;
 可以创建temp,temp1两个表的联合的视图;
视图的维护:
 alter view v_union compile;
为什么这么做呢?这跟视图的原理是有关的,视图是系统通过编译sql语句得到
的一个虚拟表,也就是说这个表是基于系统的一次编译后的sql语句而存在的;
如果基表改变了,但视图还是基于原来被编译的sql语句,所以我们需要用
alter view v_union compile来重新编译视图;


编辑:广州明生医药有限公司

标签:视图,语句,序列,数据,别名