设为首页 收藏本站
查看: 823|回复: 0

[经验分享] Oracle事务和对象上集(视图、索引)

[复制链接]

尚未签到

发表于 2018-9-5 11:01:51 | 显示全部楼层 |阅读模式
  一、Oracle事务
  ·事务的含义:事务是业务上的一个逻辑单元,为了保证数据的所有操作要么全部完成,要么全部失败。
  1、事务的开始是从一条SQL语句开始,结束于下面的几种情况:
  1)显示提交:输入commit指令,事务完成提交
  2)显示回滚:输入rollback指令,未提交的事务丢掉,回滚到事务开始时的状态。
  3)DDL语句:即create、drop等语句,这些语句会使事务自动隐式提交
  4)结束程序:输入exit退出数据库,则自动提交事务;或者意外终止、出现程序崩溃,则事务自动回滚。
  2、事务的特点-ACID特性
  1)原则性:要么同时成功,要么同时失败的原则
  2)一致性:如,a转账给b,最总结果a+b的金钱总数是不变的
  3)隔离性:当出现多个事务出现,它们之间是互相隔离、互不影响的
  4)持久性:事务一旦提交,则数据永久修改。
  3、关于事务的三个命令
  commit                      :立即提交事务
  rollback                        :回滚事务
  set autocommit on/off           :设置/关闭自动提交
  二、索引
  ·索引是Oracle的一个对象,是与表关联的可选结构,用于加快查询速度,提高检索性能。
  1、特点
  1)适当使用索引可以提高查询速度、建立索引的数量无限制
  2)可以对表的一列或者多列建立索引
  3)索引是需要磁盘空间,可以指定表空间存储索引。
  4)是否使用索引有Oracle决定
  2、索引的分类
  B树索引:从顶部为根,逐渐向下一级展开
  唯一索引:定义索引的列没有任何重复
  非唯一索引:与唯一索引相反
  反向键索引:对与数字列作用较大,会将1234生成4321进行查询的索引
  位图索引:应用于数据仓库和决策支持系统中。优点是相对于b树索引,可以减少响应时间;相对于其他索引,其空间占用少。
  函数索引:使用函数涉及正在创建索引的列的索引
  3、创建索引
  操作时我们可以使用Oracle的scott用户进行测试,首先解锁,在改一个密码,登陆进去就可以操作了
DSC0000.jpg

  create [unique] index i_name on t_name(c_list) [tablespace ts_name];  
  注释: create ... index ... on                 创建索引
  unique                          唯一索引
  i_name                          创建的索引名称
  t_name                          在哪个表创建
  (c_list)                            列名
  ts_name                     表空间名
  举例:
  create index emp_ename_idx on emp(ename);
  :b树索引
  create unique index emp_ename_unique_idx on emp(ename);
  :唯一索引
  create index emp_ename_reverse_idx on emp(ename) reverse;
  :反向索引
  create index emp_ename_upper_idx on emp(upper(ename));
  :函数索引
  4、创建索引的原则
  1)频繁检索的列
  2)经常排序、分组的列
  3)主键/外键
  4)大型索引使用nologing子句创建
  5)需定期进行组织索引、碎片整理
  5、维护索引的命令
  1)重建索引
  alter index i_table rebuild [tablespace ts_name];
  2)合并索引碎片
  alter index i_name coalesce;
  3)删除索引
  drop index i_name;
  4)查看索引(使用user_indexes、user_ind_columns字典)
  select index_name,index_tyep,table_name,column_name from user_indexes;或者
  select index_name,table_name,_column_name from user_ind_columns where
  index_name like ‘emp%’;
  三、视图
  ·视图是一个虚表,不占用物理空间,视图本身的定义语句存放于字典里,可以由一个或者多个表中获得数据。目的是为了方便查询,而不需要在敲繁琐的查询语句。
  1、视图的作用
  1)通过限制对表中预定的一组行和列进行查看,可以防止用户看到无权限数据,提供了安全性
  2)简化了用户的命令、隐藏了数据的复杂性,方便操作
  3)视图可以对列进行重命名,提升了数据库的灵活性和人性化
  4)视图将应用程序与基表定义的修改进行了隔离,表结构的修改不会影响视图结构。
  2、创建视图
  create [or replace] [force] view vname [(alias[,alias]...)] as SQL
  [with check option] [with read only];
  注释: or replace              :覆盖
  force                   :强制的;视图中的基表是否存在,都会创建
  vname                   :创建的视图名称
  [(alias[,alias]...)]            :可选项,视图别名,可以由多个
  SQL                     :SQL查询语句
  with check option       :用于更改视图时的约束
  with read only          :只读
  举例:
  create view vname as select  from tname where ‘a=b’;
  简单的视图
  create view vname as select  from tname where ‘a=b’ with read only;
  只读视图
  create force view vname as select  from tname where ‘a=b’;
  强制创建视图,假如‘tname’表不存在,也强制创建,也就是错误视图。
  create table tname (a (char));
  alter view vname compile;
  查看错误视图(使用字典)
  show errors view;
  show
  创建tname表;然后编译错误视图,使其生效
  3、在视图中使用DML语句(insert、update、delete)的限制
  1)DML语句只能修改视图中的一个基表
  2)如果修改违反了check option约束,则无法修改
  3)如果视图包括连接运算符、DISTINCT运算符、集合运算符、聚合函数和group by子句,则无法更新视图
  4)如果包含伪列、表达式,也无法更新视图
  4、维护视图
  1)删除视图
  drop view vname;
  2)查询已有视图(user_views字典)
  select viewname from user_views;
  5、物化视图
  ·顾名思义,物化视图就是将视图物理化存到磁盘,它与基表实时同步。物化视图可以避免order by子句或者多表连接查询带来的效率降低和时耗,但是会占用用磁盘空间。
  1)物化视图同步的刷新方式可分为:
  on commit:即提交事务以后
  on demand:简单讲就是用户手动刷新
  2)物化视图同步的刷新类型
  complete:完全刷新
  fast:追求速度,增量刷新
  force:Oracle自动判断使用complete还是fast类型刷新
  never:从不刷新
  ·关于以上四个类型,Oracle默认选择force刷新。工作中无特殊需求,无需更改
  6、创建物化视图
  1)首先用sys登陆,为scott用户授权
DSC0001.jpg

  2)创建物化视图日志
DSC0002.jpg

  3)正式创建
DSC0003.jpg

  注释: build immediate                 :立即创建
  refresh fast                        :刷新类型为fast
  enable query rewrite                :启用查询重写
  4)删除物化视图
  **drop materialized view materview;***


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563505-1-1.html 上篇帖子: oracle 外部表之 sqlldr 生成 下篇帖子: Oracle-day01 上
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表