一、表的类型
常用表、分区表、索引组织表(Index-organized)、族表
二、Oracle数据类型
用户定义类型
内部定义类型:
1、数量:CHAR(N)/NCHAR(N)、VARCHAR2(N)/NVARCHAR2(N)、NUMBER(P,S)、DATE、TIMESTAMP、RAW(N)、BLOB/CLOB/NCLOB/BFILE、LONG/LONG RAW、ROWID/UROWID
2、集合:变量、表
3、关系:参考
其中:
RAW(N):存储小的二进制数据,在将RAW的数据类型通过应用工具传送到其他数据库的过程中Oracle Server不会对其进行字符集的转换。
LONG/LONG RAW:为9i之前使用的LOB类型。
三、ROWID格式
1、扩展ROWID格式
OOOOOOFFFBBBBBBRRR
数据对象编号相关文件编号 块编号行编号
一个扩展ROWID需要10个字节,用18个字符表示,包含以下几个部分:
数据对象编号:在数据库对象产生的时候指定的全数据库唯一的编号。
相关文件编号:在一个表空间中是唯一的。
块编号:表示包含行块的位置。
行编号:在block(块)头中关于行信息位置的编号。
数据对象编号需要32位,相关文件编号需要10位,块编号22位,行编号16位,加在一起是80位或者10个字节。
一个扩展ROWID使用64进制编码来显示,使用6位显示对象编号,3位显示相关文件编号,6位显示块编号,3位显示行编号。64进制码使用“A-Z"、“a-z“、“0-9“加上“+”和“/”一共64个字符。
2、相对ROWID:在Oracle8以前使用相对ROWID,只使用6个字节存储。
3、使用ROWID定位一行
因为一个段只能在一个表空间中,使用数据对象编号就可以确定一行所在的表空间。表空间中相关的数据文件编号就可以确定文件,块编号就可以确定查找行所在的块,而行号就确定了这个唯一的行。行字典入口可以用来确定一行开始的地方。
四、行的结构
1、行头:纪录行中列的数量,连接信息和行琐状态。
2、行数据:对于每一列Oracle都会保存列的长度和值(假如列的值大小不超过250字节列的长度需要一个字节来存储。一个列的大小假如超过250个字节就需要3个字节来存储列的长度。列的值直接存放在列的后面。)
相邻的两行之间不需要额外的空间。在块中的每一行在行目录中都有一个位置(slot)。目录中的slot直接指向行开始的地方。
五、创建表
CREATE TABLE命令可以用来创建关系型表或者对象表。关系型表:基本的用户数据存储结构。对象表:用来存储对象类型的列,一个对象表默认情况下就是用来存储特定的对象类型数据。
创建表的原则:
1、将不同的表存放在不同的表空间。
2、使用本地模式治理表避免碎片。
在自己的方案(schema)中创建表,必须有CREATE TABLE权限,在其他方案中创建表必须有CREATE ANY TABLE权限。