Oracle表(1)

摘要:
如果数据长度未达到最大值n,Oracle8i/9i/10g将根据数据大小自动调整字段长度。如果数据前后有空格,Oracle8i将自动删除它们。2date从公元前4712年1月1日到公元4712年12月31日没有法定日期。Oracle8i/9i/10g实际上在内部以7字节存储日期数据,包括定义中的小时、分钟和秒。Oracle8i/9i使用此格式保存大型图形文件或格式化文本文件,如Microsoft Word文档,以及音频、视频和其他非文本文件。

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

常见表的类型:

Oracle表(1)第1张

规则表(Regular table),严格意义上来说又叫heaptable(堆表),也就是我们最普通的一张表。partitiontable、Index-organizedtable、Cluster三种表类型,在讲解数据结构的时候有做过简单的描述,这里就不介绍,本节的重点也就是讲解普通的表。


对于一张普通的表,他的插入规则是无序,我们把数据的存储空间看成学生宿舍楼一个连一个的房间。并不是第一个来的人就一定先在第一个房间。先来的人只要发现某个房间还有床位是空的就可以入住。那么我们如何让他变成的有序的呢?那么我可以专业创建一列来记录顺序。宿管在一楼门口发号码,进来一同学,发一个号码,上面标注几号房间几号床位。这样所有入住的同学都是有序的。

SQL>create table t
  2  (a int,
  3  b varchar2(4000) default rpad('*',4000,'*'),
  4  c varchar2(3000) default rpad('*',3000,'*'));    //创建一个表
Table created.

SQL> insert into t(a) values(1);

1row created.

SQL> insert into t(a) values(2);

1row created.

SQL> insert into t(a) values(3);   //插入若干条记录

1row created.
.........
SQL> select a fromt;
         A
----------
         3
         1
         4
         5
         2
//上面查询插入的结果是无序的,如何变成的有序的呢? 加上 order by 
SQL> select a fromt order by a;
         A
----------
         1
         2
         3
         4
         5

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

表的字段类型划分:

oracle表类型结构图:

Oracle表(1)第2张

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

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

CHAR&VARCHAR2类型存储比较:

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

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

Oracle表(1)第3张

Varchar2相比于char在大数据的存储中就有效果的节约了很多空间。

Nchar、Nvarchar2分别是 char 与varchar2的国际版。

Rowid 字段类型:

Rowid是一行数据的一个唯一标识。

下面来做个例子,来帮助我们认识它:

SQL> create table f(id int,name char(10));    //创建一个表
Table created.
SQL> insert into f values(0,'boobooke');    //插入几条相同人数据

1row created.

SQL> select * from f;    //查看表内容
ID NAME
---------- --------------------
         0boobooke
         0boobooke
         0boobooke

SQL> select rowid,id,name from f;    //查看rowid隐藏列
ROWID                      ID         NAME
------------------ ---------- -----------------------------------------AAAMiXAABAAAOjKAAA          0boobooke
AAAMiXAABAAAOjKAAB          0boobooke
AAAMiXAABAAAOjKAAC          0    boobooke

Rowid是一个隐藏的字段,每一张表都存在,默认查看一张数据的时候不会出现。只有特意加上rowid字段才会出现。

Rowid的结构:

Oracle表(1)第4张

需要声明一下的是,现在的格式是9i及以后版本的格式。

前6位(OOOOOO)为数据对象ID,一张表、一个所引都是一个数据对象,oracle都会分配给他们一个唯一的数据对象。

紧跟的3位(FFF)为相对的文件ID,我们知道表空间是由不同的文件组成,对象存储的某个文件里,每个文件会对应一个ID号

再接着的6位(BBBBBB)为块ID,文件是由块组成的,每个块也有一个唯一的ID编号。

最后3位(RRR)为行ID,每个块又可划分成行,每个行也有一个ID号。

其他类型介绍:

1 number(m,n)m=1to38,n=-84to127可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。如:number(5,2),则这个字段的最大值是99999,如果数值超出了位数限制就会被截取多余的位数。如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。如:number(3,0),输入575.316,真正保存的数据是575。

2date无从公元前4712年1月1日到公元4712年12月31日的所有合法日期,Oracle8i/9i/10g其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。缺省格式为DD-MON-YY,如07-11月-00表示2000年11月7日。

3Long:可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。

long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。

4raw(n)n=1to2000可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle8/9i用这种格式来保存较小的图形文件或带格式的文本文件,如MiceosoftWord文档,以及音频、视频等非文本文件。

raw是一种较老的数据类型,将来会逐渐被BLOB、NCLOB等大的对象数据类型所取代。

5longraw可变长二进制数据,最大长度是2GB。Oracle8i/9i用这种格式来保存较大的图形文件或带格式的文本文件,如MiceosoftWord文档,以及音频、视频等非文本文件。

在同一张表中不能同时有long类型和longraw类型,longraw也是一种较老的数据类型,将来会逐渐被BLOB、NCLOB等大的对象数据类型所取代。

6blobclobnclob

三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如MiceosoftWord文档,以及音频、视频等非文本文件,最大长度是4GB。LOB有几种类型,取决于你使用的字段的类型,Oracle9i/10g实实在在地将这些数据存储在数据库内部保存。可以执行读取、存储、写入等特殊操作。

7bfile无在数据库外部保存的大型二进制对象文件,最大长度是4GB。这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。Oracle8i/9i/10g可以读取、查询BFILE,但是不能写入。大小由操作系统决定。

8 LONG型:此数据类型用来存储可变长度的字符数据,最多能存储2GB。但是有一些限制:一个表中只有一列可以为LONG型,LONG列不能定义为主键或唯一约束,不能建立索引,过程或存储过程不能接受LONG数据类型的参数。

9 LOB数据类型

●LOB又称为“大对象”数据类型:主要有CLOB,BLOB(NBLOB),BFILE,三种子类型。

●CLOB代表(CHARACTERLOB),它能够存储大量字符数据,可以存储非结构化的XML文档。

●BLOB代表(BINARYLOB),它可以存储较大的二进制对象;如图形,音视频剪辑。

关于表的一些信息:

Oracle规定一张表最多可以有1000列,但一般在我们设计表的时候根本不需这么多列,如果你真这么干了,很有可能你的设计不合理,要么就是极其特别的情况下需要这么做。对一个表的列数设计的越少,oracle对表的操作性能越高。如果表的列数超过254列的时候,oracle在存放的时候分多个行片(rowpieces),当你在读的时候,oracle将这些生片重新组装产生一个完整的列。

Oracle对一张表存储的行数没有限制,理论上是无限的。但我们会受到其它的限制,如磁盘空间、内存等。例如,一个表这空间最多可以包含1022个文件(当然,oracle10g中有一个BIGFILE表空间使文件的数量大大增加,超过了1022的限制)假设你的每个文件是32GB,那一个表空间可以放32*1022=32704GB,这将是2143289344个数据块,假设第个块16KB,一个块可以放160条记录,一行80到100个字节,那么一个表空间可存放342926295040行数据。Oracle还提供了分区表的功能,一个表可以拆分成1024个分区表,那么最大值是1024*342926295040行数据。这只是个理论最大值。

索引是依附于表的,索引就是把不同列组合起来。在一张表中创建所引的个数理论上是无限的。

那么一个数据库可以放多少张表?这个理论上也是无限,但一个数据库中不可能有上百万张表,这样对于创建与维护几乎是不可能的。但对于大型数据库来说有几千张表是完全可能。

一列数据在数据块中的存储:

Oracle表(1)第5张

Rowheader:存储一行中有多少行的信息,链接信息和行锁的信息。

Columnlength:用来存储列的长度。

Columnvalue:用来存储列的值。

免责声明:文章转载自《Oracle表(1)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇idea中web.xml报错 Servlet should have a mappingDjango文档——Model中的ForeignKey,ManyToManyField与OneToOneField下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SqlServer2005到Oracle

由于项目需要,最近一直在研究SqlServer2005数据库如何迁移到Oracle(10g)中,这里小结一下研究过程中碰到的一些问题(主要分客户端和服务器) 1、服务器: 1.1 操作系统:Window Server 2003.(安装好后设置计算机名:Server_Name) 1.2 安装Oracle10g服务器端(10201_database_win3...

oracle 存储过程的基本语法 及注意事项

oracle 存储过程的基本语法 1.基本结构CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) IS变量1 INTEGER :=0;变量2 DATE;BEGIN END 存储过程名字2.SELECT INTO STATEMENT  将select查询的结果存入到变...

从 SQL Server 到 MySQL (一):异构数据库迁移

背景 沪江成立于 2001 年,作为较早期的教育学习网站, 当时技术选型范围并不大: Java 的版本是 1.2,C# 尚未诞生,MySQL 还没有被 Sun 收购, 版本号是 3.23。 工程师们选择了当时最合适的微软体系,并在日后的岁月里, 逐步从 ASP 过度到 .net,数据库也跟随 SQL Server 进行版本升级。 十几年过去了,技术社区已经...

influxdb基本SQL操作2

influxdb0.13命令  1、数据构成 INSERT cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000 第一部分:“cpu_load_short,host=server01,region=us-west” 第一部分称为key,...

Oracle升级前备份和失败回退

一、升级前备份 1、软件备份[root@localhost backup]# su - oracle [oracle@localhost ~]$ cd $ORACLE_HOME[oracle@localhost db_1]$ pwd/db/oracle/oracle/product/10.2.0/db_1[oracle@localhost db_1]$...

RHEL6.6安装Oracle 11g RAC

实验环境准备虚拟机:VMware® Workstation 14 Pro操作系统:Red Hat Enterprise Linux 6.6 x86_64rhel-server-6.6-x86_64-dvd.isooracle软件:oracle 11.2.0.4p13390677_112040_Linux-x86-64_1of7.zipp13390677_1...