【每日一记8】+第7天+oracle 表(上)
  

young_1003 9261人觉得有帮助

{{ttag.title}}
本帖最后由 young_1003 于 2020-6-20 10:48 编辑

因为我们对数据库的操作,90%以上是对表的操作,下面我们一起来学习一下。
常见表的类型:


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

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

  我们可以在表中添加一列用来记录行号,每添加一条数据自动加1。这样就有效保证插入有数据是有序列的。
表的字段类型划分
oracle表类型结构图:

  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的国际版。

Rowid 字段类型
Rowid 是一行数据的一个唯一标识。

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

Rowid的结构:
需要声明一下的是,现在的格式是9i 及以后版本的格式。
前6位(OOOOOO)为数据对象ID,一张表、一个所引都是一个数据对象,oracle都会分配给他们一个唯一的数据对象。
紧跟的3位(FFF)为相对的文件ID,我们知道表空间是由不同的文件组成,对象存储的某个文件里,每个文件会对应一个ID号
再接着的6位(BBBBBB)为块ID ,文件是由块组成的,每个块也有一个唯一的ID编号。
最后3位(RRR)为行ID ,每个块又可划分成行,每个行也有一个ID号。
其他类型介绍

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

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

3  Long:可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
    long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。  

4  raw(n) n=1 to 2000 可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8/9i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档, 以及音频、视频等非文本文件。
    raw是一种较老的数据类型,将来会逐渐被BLOB、NCLOB等大的对象数据类型所取代。  

5  long raw 可变长二进制数据,最大长度是2GB。Oracle 8i/9i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
    在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、NCLOB等大的对象数据类型所取代。  

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

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

8  LONG型:此数据类型用来存储可变长度的字符数据,最多能存储2GB。但是有一些限制:一个表中只有一列可以为LONG型,LONG列不能定义为主键或唯一约束,不能建立索引,过程或存储过程不能接受LONG数据类型的参数。
9  LOB数据类型
● LOB又称为“大对象”数据类型:主要有CLOB,BLOB(NBLOB),BFILE,三种子类型。
● CLOB代表(CHARACTER LOB),它能够存储大量字符数据,可以存储非结构化的XML文档。
● BLOB代表(BINARY LOB),它可以存储较大的二进制对象;如图形,音视频剪辑。


关于表的一些信息
  Oracle规定一张表最多可以有1000列,但一般在我们设计表的时候根本不需这么多列,如果你真这么干了,很有可能你的设计不合理,要么就是极其特别的情况下需要这么做。对一个表的列数设计的越少,oracle 对表的操作性能越高。如果表的列数超过254列的时候,oracle在存放的时候分多个行片(row pieces),当你在读的时候,oracle将这些生片重新组装产生一个完整的列。
  Oracle对一张表存储的行数没有限制,理论上是无限的。但我们会受到其它的限制,如磁盘空间、内存等。例如,一个表这空间最多可以包含1022个文件(当然,oracle10g中有一个BIGFILE 表空间使文件的数量大大增加,超过了1022的限制)假设你的每个文件是32GB,那一个表空间可以放32*1022=32704GB ,这将是2143289344个数据块,假设第个块16KB,一个块可以放160条记录,一行80到100个字节,那么一个表空间可存放342926295040行数据。Oracle还提供了分区表的功能,一个表可以拆分成1024个分区表,那么最大值是1024*342926295040行数据。这只是个理论最大值。
  索引是依附于表的,索引就是把不同列组合起来。在一张表中创建所引的个数理论上是无限的。
  那么一个数据库可以放多少张表?这个理论上也是无限,但一个数据库中不可能有上百万张表,这样对于创建与维护几乎是不可能的。但对于大型数据库来说有几千张表是完全可能。
一列数据在数据块中的存储:

Row header :存储一行中有多少行的信息,链接信息和 行锁的信息。
Column length : 用来存储列的长度。
Column value : 用来存储列的值。

打赏鼓励作者,期待更多好文!

打赏
1人已打赏

gqce 发表于 2020-6-19 15:59
  
感谢分享
高鹏飞 发表于 2020-6-19 18:02
  
学习学习
新手780102 发表于 2020-6-20 09:41
  

有用,收藏
司马缸砸了光 发表于 2020-6-20 09:47
  
感谢分享
JM 发表于 2020-6-20 09:54
  
感谢分享
新手978513 发表于 2020-6-20 10:01
  
感谢分享
新手517842 发表于 2020-6-20 10:09
  
感谢分享
新手031815 发表于 2020-6-20 10:19
  

感谢分享
新手899116 发表于 2020-6-20 10:30
  
感谢分享
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
干货满满
技术笔记
新版本体验
功能体验
产品连连看
标准化排查
2023技术争霸赛专题
技术咨询
信服课堂视频
运维工具
用户认证
SANGFOR资讯
社区帮助指南
秒懂零信任
技术晨报
VPN 对接
专家分享
自助服务平台操作指引
GIF动图学习
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
安装部署配置
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
云计算知识
原创分享
解决方案
sangfor周刊
项目案例
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
答题榜单公布
纪元平台
通用技术
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人