oracle rowed,《Oracle Database Concepts 11g Release 2》读书笔记(2)...

编程入门 行业动态 更新时间:2024-10-23 01:51:12

oracle rowed,《Oracle Database Concepts 11g Release 2》<a href=https://www.elefans.com/category/jswz/34/1768764.html style=读书笔记(2)..."/>

oracle rowed,《Oracle Database Concepts 11g Release 2》读书笔记(2)...

Table(P36-P50)sql

1.定义数据库

Table是oracle中数据的基本组成单位. Oracle中定义了两种类型的Table:session

1) Relation Tableoracle

最经常使用的table类型,列由基本数据类型组成.app

每一个Realation Table是如下三种组织形式之一:性能

a) heap-organized table编码

table的默认组织形式spa

b) index-organized table

数据按primary key进行组织,能够搞高性能code

c) external table

只读,数据仓库中经常使用

2) Object Table

Table中的某一列的数据类型是table对象

从存储形式来分, Table能够分为两种Table:

1) permanent table

经常使用的table

2) temporary table

其建立与数据操做同permanent table相一致;但只有同一个transaction或session中才可见.

2. Columns

table中的column包括两种:

1) nonvirtual column

经常使用的column

2) virtual column

即表达式/function,不占表空间,在select时进行计算,并返回结果.

3.CHAR和VARCHAR2

若是字段类型为CHAR,当输入的数据长度不足时, oracle会补空格至字段长度.

若是字段类型为VARCHAR2,则输入的长度为多少,就使用多少.

Oracle比较VARCHAR2字段时,是直接进行比较;而比较CHAR字段时,则是先补空格,使其长度与字段长度一致,而后进行比较(Oracle Database comparesVARCHAR2values using nonpadded comparison semanticsand comparesCHARvalues using blank-padded comparison semantics)

4.NCHAR和NVARCHAR2

对应于CHAR和VARCHAR2,只是其中存放的数据为Unicode编码

5.Numeric Data Types

(未细看)

6. Date

Oracle内部以7个字节的整数形式存储Date类型数据,分别与’世纪’,’年’,’月’,’日’,’时’,’分’,’秒’相对应.

Date支持数字运算,因此Date类型字段能够与number进行加减运算.

格式化时, RR与YY都是返回year的最后两位;但对于RR来讲,09表明的是2009,对于YY来讲,RR表明的是1909.

7. ROWID Data Types

Oracle使用rowid来记录数据库中每一行的地址,共分为三种类型的rowed:

1) Physical Rowids

记录存储在heap-organized tables, clustered tables, and table and index partitions.里的行的地址

2) Logical Rowids

记录存储在index-organized tables里的行的地址

3) Foreign Rowids

在foreign tables里定义,不是标准的oracle rowed

Oracle内部使用rowid来创建索引,经过rowid能够快速的访问指定行;在客户端使用rowid有如下三个好处:

1) rowid是访问指定行的最快方式

2) rowid能够反映表的组织形式(是heap-organized仍是index-organized)

3) rowid能够惟一标记指定表中的某一行(对于聚簇表来讲,不一样表间的行的rowid有可能同样)

能够在建立表时指定某一列为ROWID类型,对此列的操做与其余列相一致.(我试了,能够指定某一列的类型为ROWID ,可是并不能往此列插数据,为什么?)

Oracle中的每张表都有一个名为Rowid的伪列,用于记录每行的直址,其数据类型为ROWID;这一列相似于一个不带参数的function指定的virtual column,故其不占用表空间;此列只能select,不能insert, update, delete.

8. Object Table

Object Type是用户定义的类型,包括名称,属性,方法; Object Type属于数据库的逻辑结构,不占用存储空间;

Object Table指的是每一行为一个Object Type的表;

例:

-- Object Type

CREATE TYPE department_typ AS OBJECT

( d_name VARCHAR2(100),

d_address VARCHAR2(200) );

-- Object Table

CREATE TABLE departments_obj_t OF department_typ;

INSERT INTO departments_obj_t

VALUES ('hr', '10 Main St, Sometown, CA');

相似Relation Table中的Rowid,在Object Table中的每一行,由一个隐藏列OID来惟一标记

9. Temporary Table

Temporary Table在一个transaction/session里进行建立,在transaction/session结束时会被自动删除,在transaction/session里建立的temporary table仅此transaction/session可见.

场景:

在一个选课程序中,每一个学生对应一个session,每条选课记录都存在一个Temporary Table里,学生能够经过对此Temporary Table表来进行增删改来修正他的选择,直至最后肯定课表时,才将其写入Permanent Table里.

经过CREATEGLOBALTEMPORARYTABLE来建立一个Temporary Table.在ON COMMIT子句中指定表中的数据是transaction-specific(默认)或者是session-specific.

例: (无)

与其余关系数据库的实现不一样, Oracle在建立Temporary Table时,在data directory里有static definition;表在初始建立时为空,直到用户插入数据;

由于Temporary Table有static definition,因此能够在上面建立index,trigger,view;固然这些也一样是temporary的,且与table有相同的transaction/session scope;

虽然temporary table在data directory里有static definition,可是在表建立时并不分配空间,而是在插入数据时才进行空间分配.对于transaction-specific类型的temporary table,其空间在transaction结束时释放;对于session-specific类型的temporary table,其空间在session结束时释放.

10. External Table

External Table使用户能够像访问一张普通数据库表同样访问一个外部文件(相似如下数据的text文件)

100,Steven,King,SKING,515.123.4567,17-JUN-03,AD_PRES,31944,150,90

101,Neena,Kochhar,NKOCHHAR,515.123.4568,21-SEP-05,AD_VP,17000,100,90

102,Lex,De Haan,LDEHAAN,515.123.4569,13-JAN-01,AD_VP,17000,100,90

External Table能够提高在数据仓库环境中进行ETL任务的性能

建立一个External Table时,会在data directory里添加对应的meta data,但此meta data并不描述存储在表里的数据,也不描述数据是如何存储在外部文件的,而是描述External Table该如何展现外部文件中的数据.

建立语句CREATETABLE...ORGANIZATIONEXTERNAL包含了两部分信息:第一部分描述了各个列及其类型,相似于view;第二部分描述了external data是如何映射到各个列的.

若是External Table不是经过ORACLE_DATADUMP access driver的CREATE TABLE AS SELECT来进行建立,则此table是只读的,且不支持index column, virtual column, column object;

External Table Access Drivers是一套将外部数据解释给数据库的API,共分为两种:

1) Oracle Loader(默认)

只读,不能进行create, update, insert操做

2) Oracle DataDump

容许用户向external table插入数据,但当external file建立后,数据库不能再向其内插入数据或进行update(只能在建立时插入数据?)

能够进行显示的load和unload外部数据

11. Table Storage

Oracle使用data segment来保存table中的数据.Oracle内部的数据组成单位依次为: data blocks->extents->data segment.(由大至小)

Table的segment包含在此table的拥有者的默认namespace中或在CREATE TABLE时指定的namespace中.

Oracle中的table默认以heap-organized的形式来存储数据,每一行在的插入位置是segment中找到的第一个可用的空闲空间,因此oracle不保证用户所查出的数据与其插入顺序相一致.

Table在建立时, oracle通常会按CREATE TABLE语句中所列出的列顺序来存储各个列,但若是存在类型为LONG的列,此无将会被置在最后面;若是新增一列,则此列将会被存储在最后面.

Table中能够包含Virtual Column,此column不分配磁盘空间,oracle在执行查询语句时按一个表达式或function来计算出此column的值.对virtual column,用户能够执行如下操做: index, collect statistics, create integrity constraints.

Oracle中的row存储在data block里,每一个row都少于256列,并存储在一个或多个row pieces里.(这里的row pieces应该等价于data blocks)

Table cluster与nontableclustered table中的row所包含的信息基本一致,可是table cluster中的row多包含其所属的cluster key.(????不明白,后面再看table cluster)

Oracle中的rowid包含10个字节,在heap-organized table中用于惟一指定row的物理地址;在table cluster中,不一样table中的行若是在相同的data block中,则有可能会有相同的rowid;(???为何)

Oracle内部使用rowid来实现index;例如,在B-Tree中的每一个key都由rowid所组成,经过此rowid,能够最快速度的访问指定行.

Table Compression(未细看,主要应用于OLTP中)

NULL指的是一列数据missing, unknown, inapplicable.在一行中,两个不为NULL的列中的NULL列,将会占用1个字节,用以存储此列的长度.若是一行的最后两个列都为NULL,则此两例不分配存储空间.

更多推荐

oracle rowed,《Oracle Database Concepts 11g Release 2》读书笔记(2)...

本文发布于:2024-03-06 02:15:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714090.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:读书笔记   Oracle   rowed   oracle   Database

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!