zoukankan      html  css  js  c++  java
  • Oracle表概念

    对于初学者来说,对表的概念也有一定的认识。因为我们对数据库的操作,90%以上是对表的操作。

    常见表的规则表(Regular table),严格意义上来说又叫 heap table(堆表),也就是我们最普通的一张表。

    partition talbe、Index-organized table、Cluster 三种表类型。

    partition Table :

    如果一张表非常大,里面存储了几千万条、上亿条记录,那么对这一张表进行操作,效率就非常低了。分区表是将大表的数据分成称为分区的许多小的子集。假如一张表是存放中国人口信息的表,那么这么多条记录是有规律的,可以基于某一个字段将其分开。那么可以根据省级行政区可以划分  个分区,每个分区实际上就是一个独立的表,但在逻辑上这些分区又同属于一张表。

    如果一张表是普通的表,只点一个 segments;如果一张表是 partition 的表,可能占多个 segments。

    Index-organized table :

    索引组织表(IOT),就是存储在一个索引结果中的表。存储在堆中的表是无组织的(也就是说,只要有可用的空间,数据可放在任何地方)。对你的应用来说,IOT 表和一个“常规”表并无差别。使用堆组织表时,我们必须为表和表主键上的索引分别留出空间。而 IOT 不存在主键的空间开销,因为索引就是数据,数据就是索引。

    IOT 带来的好处不仅节约磁盘空间的占用,更重要的是大幅度降低了 I/O,减少了访问缓冲区 缓存(尽管从缓冲区缓存获取数据比硬盘要快得多,但缓冲区缓存并不是免费,而且也绝不是廉价的。每个缓冲区缓存获取都需要缓冲区缓存的多个闩(shuān),而闩是串行化设备,会限制应用的扩展能力)

    Cluster :

    Oracle 中普通的表称为堆表(heap table),堆表中的数据是无序存放的,往往在使用一段时间后,数据就变得非常无序。比如:索引中相同的 key 对应的数据存放在不同的 block 中,这时,如果要通过索引查询某个 key 的数据,就需要访问很多不同的 block,代价非常高。 我们发现很多表与表,他们的数据有相关性,因为我们访问一个表里的数据,往往要访问另一些表里的数据。我们可以把这些数据物理上存储在一块。

    本节的重点也就是讲解普通的表。

    对于一张普通的表,他的插入规则是无序,我们把数据的存储空间看成学生宿舍楼一个连一个的房间。并不是第一个来的人就一定先在第一个房间。先来的人只要发现某个房间还有床位是空的就可以入住。

    那么我们如何让他变成的有序的呢?那么我可以专业创建一列来记录顺序。宿管在一楼门口发号码,进来一同学,发一个号码,上面标注几号房间几号床位。这样所有入住的同学都是有序的。

    SQL> create table test (a int,b varchar2(200) default rpad('*',200,'*'), c varchar2(200) default rpad('*',200,'*'));
    
    Table created.
    SQL> insert into test(a) values(1); 
    1 row created.
    SQL> insert into test(a) values(2);
     1 row created.
    SQL> insert into test(a) values(3);--插入若干条记录
    1 row created.
    .........
    SQL> select a from test;
    
             A
    ----------
             2
             3
             4
             5
             1
    
    SQL> 
    

      

    上面查询插入的结果是无序的,如何变成的有序的呢?加上 order by

    SQL> select a from t order by a;
    
             A
    ----------
             1
             2
             3
             4
             5
    
    SQL> 
    

      

    我们可以在表中添加一列用来记录行号,每添加一条数据自动加1。这样就有效保证插入有数据是有序列的。

    表的字段类型划分:

    Oracle 数据类型分用户自定义类型(user-defined)和内嵌类型(built-in),但我们大多时候都用内嵌类型,在极特别情况下才会用到自定义类型。

    内嵌类型可以用为三大类,scalar 翻译成标量,可以理解成单一的数据类型,collection 收集, 这里可以理解为复合的类型,relationship 关系类型,类似于指针引用。而我们一般最常用的也就 是 scalar 数据类型。

    Scalar 又可以分为:

    字符串型 char(n)、nchar(n)、varchar2(n)、nvarchar2(n)、

    数值型 number(p,s)、

    日期型 data、timestamp

    二进制类型 raw(n)、blog、clob、nclob、bfile、long、long raw、

    记录编号 rowid、urowid

    CHAR & VARCHAR2 类型存储比较:

    char(n) n=1 to 2000 字节定长字符串,n 字节长,如果不指定长度,缺省为 1 个字节长(一个汉字为 2 字节)。

    varchar2(n) n=1 to 4000 字节可变长的字符串,具体定义时指最大长度 n,这种数据类型可以放数字、字母以及 ASCII 码字符集(或者 EBCDIC 等数据库系统接受的字符集标准)中的所有符号。如果数据长度没有达到最大值 n,Oracle 8i/9i/10g 会根据数据大小自动调节字段长度,如果你的数据前后有空格,Oracle 8i 会自动将其删去。VARCHAR2 是最常用的数据类型。

    Varchar2 相比于 char 在大数据的存储中就有效果的节约了很多空间。 Nchar、Nvarchar2 分别是 char 与 varchar2 的国际版。

    表日常的一些操作

    表的改变

    alter table test move tablespace test;
    

      

    清空表

    truncate table test
    

      

    删除表

    drop table test
    drop table test cascade constraints;
    

      

    删除某列数据

    alter table test drop column comments cascade constraints checkpoint 1000;
    

      

    创建表各个参数的意义:

    Create table
    create table TEST.T1
    (
      deptno NUMBER(2),
      dname  VARCHAR2(14),
      loc    VARCHAR2(13)
    )
    tablespace TEST
      pctfree 10 --此块空闲空间小于10%,则此块在FREELIST列表中移除
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K --当前64k大小
        next 1M --下一个锻的空间
        minextents 1 --最小锻个数
        maxextents unlimited --限制最大锻个数-不限制
      );
  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/black-start/p/11002011.html
Copyright © 2011-2022 走看看