Oracle数据库的对象

一、同义词(synonym ):

1、同义词概念:

 Oracle 数据库中提供了同义词管理的功能。同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库 将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对 象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。

2、同义词分类:

 Oracle同义词有两种类型,分别是公用Oracle同义词与私有Oracle同义词。

  1、公用Oracle同义词:由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。
  2、私有Oracle同义词:它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。

创建公有Oracle同义词的语法:Create [public] synonym 同义词名称 for 你要给那张表取同义词;

 删除同义词 Drop synonym 同义词名称

二、视图(view):

1、视图的定义:

视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次使用的时候,只是重新执行SQL。

 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。

 视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。

 视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。

 还有一种视图:物化视图(MATERIALIZED VIEW ),也称实体化视图,快照 (Oracle8i 以前的说法) ,它是含有数据的,占用存储空间。

**tips:** 查询视图没有什么限制, 插入/更新/删除视图的操作会受到一定的限制; 所有针对视图的操作都会影响到视图的基表; 为了防止用户通过视图间接修改基表的数据, 可以将视图创建为只读视图(带上with read only选项)

2、视图的作用:
1)提供各种数据表现形式, 可以使用各种不同的方式将基表的数据展现在用户面前, 以便符合用户的使用习惯(主要手段: 使用别名);
2)隐藏数据的逻辑复杂性并简化查询语句, 多表查询语句一般是比较复杂的, 而且用户需要了解表之间的关系, 否则容易写错; 如果基于这样的查询语句创建一个视图, 用户就可以直接对这个视图进行"简单查询"而获得结果. 这样就隐藏了数据的复杂性并简化了查询语句.这也是oracle提供各种"数据字典视图"的原因之一,all_constraints就是一个含有2个子查询并连接了9个表的视图(在catalog.sql中定义);
3)执行某些必须使用视图的查询. 某些查询必须借助视图的帮助才能完成. 比如, 有些查询需要连接一个分组统计后的表和另一表, 这时就可以先基于分组统计的结果创建一个视图, 然后在查询中连接这个视图和另一个表就可以了;
4)提供某些安全性保证. 视图提供了一种可以控制的方式, 即可以让不同的用户看见不同的列, 而不允许访问那些敏感的列, 这样就可以保证敏感数据不被用户看见;
5)简化用户权限的管理. 可以将视图的权限授予用户, 而不必将基表中某些列的权限授予用户, 这样就简化了用户权限的定义。
3、视图的创建:
**1****权限:** 要在当前方案中创建视图, 用户必须具有create view系统权限; 要在其他方案中创建视图, 用户必须具有create any view系统权限. 视图的功能取决于视图拥有者的权限.
**2** **语法:** create [ or replace ] view [schema.]view_name
           [ (column1,column2,...) ]
           as 
           select ...
           [ with check option ]            [ constraint constraint_name ]
           [ with read only ];

三、索引(index ):

1、数据库索引:

在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。

索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 

对于数据库来说,索引是一个必选项,但对于现在的各种大型数据库来说,索引可以大大提高数据库的性能,以至于它变成了数据库不可缺少的一部分。

2、索引原理:

\1.  若没有索引,搜索某个记录时(例如查找name='wish')需要搜索所有的记录,因为不能保证只有一个wish,必须全部搜索一遍
\2. 若在name上建立索引,oracle会对全表进行一次搜索,将每条记录的name值哪找升序排列,然后构建索引条目(name和rowid),存储到索引段中,查询name为wish时即可直接查找对应地方
\3.创建了索引并不一定就会使用,oracle自动统计表的信息后,决定是否使用索引,表中数据很少时使用全表扫描速度已经很快,没有必要使用索引

3、索引的使用:

先创建一个测试表


#创建一个测试表

``create table cstable (``id` `int,sex char(1),name char(10));` `#插入5000万行测试数据``begin``for` `i ``in` `1..50000000``loop``insert into cstable values(i,``'M'``,``'ljy'``);``end loop;``commit;``end;``
```

(1)单一索引:

单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。
#创建一个单一索引``create index cs_index1 on cstable(``id``);``注:对表的第一列(``id``)创建索引。` `#查看某一行的数据``select` `id``,sex,name from cstable where ``id``=8888888;``创建索引前大约16.77秒,创建索引后查找大约0.366秒

(2)复合索引(基于多个列的索引):

索引分离于表,作为一个单独的个体存在,除了可以根据单个字段创建索引,也可以根据多列创建索引

用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。复合索引的创建方法与创建单一索引的方法完全一样。

Oracle要求创建索引最多不可超过32列。
create index cs_index2 on cstable(``id``,sex);``注:对表的列(sex,name)创建索引。` `select` `id``,sex,name from cstable order by ``id``,sex;``#创建索引前大约16.77秒,创建索引后查找大约39.366秒

 

(3)创建基于函数的索引:


--在cstable表的name列上执行大小写无关的搜索``CREATE INDEX upper_index3 ON cstable(UPPER(name))` `SELECT * FROM cstable WHERE UPPER(name)=``'LJY'

(4)删除和修改索引:


a.重建索引:如果经常在索引列上执行DML操作,需要定期重建索引``ALTER INDEX cs_index1 REBUILD;` `

b.删除索引``DROP INDEX cs_index2;



四、序列(sequence):

1、序列定义:

序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。

其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。


2、创建序列:

创建序列需要CREATE SEQUENCE系统权限。序列的创建语法如下:

  CREATE SEQUENCE 序列名

  [INCREMENT BY n]

  [START WITH n]

  [{MAXVALUE/ MINVALUE n| NOMAXVALUE}]

  [{CYCLE|NOCYCLE}]

  [{CACHE n| NOCACHE}];

  3、注意事项:
\1) INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
\2) START WITH 定义序列的初始值(即产生的第一个值),默认为1。
\3) MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
\4) MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。
\5) CYCLENOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
\6) CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
\7) NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用。
\8) CURRVAL 中存放序列的当前值,NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效。
4、小tips:

大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle序列允许将序列提前生成 cache x个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但cache个数也不能设置太大,因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失,当数据库再次启动后,序列从上次内存中最大的序列号+1 开始存入cache x个。这种情况也能会在数据库关闭时也会导致序号不连续。

五、触发器(trigger):

1、触发器的定义:
\1触发器只作用于(增删改)当你使用触发器后你在执行(增删改)是时候会自动触发触发器
\2触发器不需要手动调用
\3触发器在Oracle里面可以作用于自动增长因为Oracle里面主键不可以自增
2、触发器的使用:

触发器有老表和新表

他们在拿数据时候就要分清楚

类型老表(old新表(new
insert(增加)没有数据有数据
update(修改)没有修改的数据修改的数据
delete(删除)有数据没有数据

odl或者new (一定要加:这个符号)去拿数据

比如:

:odl。name=:new。name

判断新表数据和老表数据是否一样

after在进入表之后触发

before在进入表之前

create or replace trigger 触发器名称
after(before) delete(删除时候自动触发) on stuinfo --定义触发的时间与绑定的表
for each row --行级触发器(不写就是一整个)
  begin
   
你要触发的效果写在这里
  end;

  • 30
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小狗爱敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值