Orcale(一)之:表1

来源:互联网 发布:迈达斯桥梁软件培训班 编辑:程序博客网 时间:2024/05/17 23:08

说在前面的话  

       在学习一个东西之前,我觉得基础是很重要的。所以我在学习数据库之前,会把相关的术语弄明白。进这一行,连术语都不理解,那更不用明白别人想告诉你的东西了。

      这是我自我学的第一篇,互勉。

       在Orcale 数据库之中,表的种类有9种:堆组织表、索引组织表、索引聚簇表、散列聚簇表、有序散列聚簇表、嵌套表、临时表、对象表、外部表。我们常见的表(普通表)是堆组织表。堆组织表是把数据以“堆”(heap)的方式来管理:新增数据时,会使用段中第一个找到能放得下这个数据的空间;删除数据时,这个空间允许以后新增或更新的数据用。这是一种自由使用的方式。


视图(view)

      视图其实就是一条查询sql语句所得到的结果,将这一结果作为一个表来使用,所以可以把视图可以被看作是存起来的一条SQL语句或一个虚拟表。真实表里的数据都是存储在真实的硬盘或其他空间里的,但视图不同,它是把数据从这些真实表中通过SQL语句查出来再呈现给我们的。这个应该很好理解:表就像京东分布在各地的仓库,里面有进来的各种货;视图就像我们登上京东网页上的看到的店铺,这些店铺可以让你知道京东有啥东西卖,但只是图片,并不真实。你想要了下单的时候它才从实地仓库发货给你。这就是视图的功能。视图没有分配存储空间,视图中更没有实际的数据,视图中的数据是从基表中获取,这些数据在视图被用到时会动太动态的生成(发货一样)。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,并不需要额外的存储空间,但基表中有变化时,视图也是会变的(其个物品没货时,网站也相应显示没货)。

视图的创建:

     CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)]
     AS subquery
     [WITH CHECK OPTION [CONSTRAINT constraint]]
     [WITH READ ONLY]
     其中:
    OR REPLACE:若所创建的试图已经存在(名字相同时),Oracle自动重建该视图(重建后的视图只是名字一样,其他未必一样);
    FORCE:不管基表是否存在ORACLE都会自动创建该视图;
    NOFORCE:只有基表都存在ORACLE才会创建该视图:
    alias:为视图产生的列定义的别名;
    subquery:一条完整的SELECT语句,可以在该语句中定义别名;
    WITH CHECK OPTION : 插入或修改的数据行必须满足视图定义的约束;
    WITH READ ONLY : 该视图上不能进行任何DML操作

   视图可以.将复杂的查询显示得得意明了,方便阅读理解。
        select  s.kemu,sum(*) as num
            from people p, scod s 
               where p.peopleId=s.peopleId 
                    group by  s.kemu
          可以将两个表的关联变为一个视图 view_01,从此,查询变为:select  kemu,num from view_01。


索引

        数据库索引,是数据库管理系统中一个排序的数据结构,用它来协助我们进行快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。
  除了数据,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

        以上说法也许过于书面,那么下面我以自己的理解用大白话来说明下我理解的这个索引:

        顾明思议,虽然它是数据库中的索引,但它跟我们一般书的目录(没记错的话这目录有的书也叫“索引”)起的作用的一样。如果我要看一本语文书的第18课,没有这目录,我们运气不好的话可能要翻完整本书的每一页,但有了目录(索引),最不好的情况也就找完整个目录,再找到第18课。这就大大减少了查询的速度。这是如果你第18课从第51页搬52页了,那目录也得进行相应的修改。这里我已经把索引的优点与缺点都大白话地说出来了,应该能形象地理解吧。如果没有索引,我们在对数据表进行查询时,通常得扫完表中所有列所有行才能找到符合我们所要条件的一列或多列;有了索引,我们只需要先从索引中找出符合条件的,再由此定位到我们所要查询的表的某一列或多列,就不用全表查了。可能前面我对索引说得还是比较含糊,虽然大家知道这个叫“索引”的东东有什么作用功能,但还是不知道“索引”的皮下面包的是什么东西。

        其实,“索引”就是一张数据表,不过不是普通一般的表,是经过特别处理的表,前面说过了“是一个经过了排序的数据结构”,这里我就不深入解释,大家就当是一张只有一列(有的多列)的并且经过排序的表。比如有一张people表,里面有name,sex,age三个字段,这表里有很多很多数,各种人,它们对应有性别有年龄就在这张表里存着。有一天,我从这张people表中把name这一列单独找出来,按姓按首字母从A排到Z排好放到另一张nameTable表中,这张表就是一个索引,我找张三时,先在nameTable中找到张三,再由此直接去找people表中name为张三的这一行,就不用从第一行一路查下来了。也许你会问,nameTable表也是从第一行一路查下来才找到张三的啊,跟people表从第一行一路找下来有区别么。有区别。people每找一行有三列,假设一列用走一步表示,那找十行就得走3*10=30步;而nameTable表一行只有一列,十行才1*10=10步。这就是索引。关于如何由索引定位到我们所要查的表的数据的,其实索引表的那一列,并不止是保存张三这名字而已,也保存了“张三”这个名字在所要查的表的具体位置,可以让我们直奔那个地址而去。

      

    


0 0
原创粉丝点击