Oracle数据库基础学习09-表和表列

本文介绍了Oracle数据库中的五种表类型:标准表、临时表、索引表、簇表和分区表,以及表和列的命名规则。在列数据类型方面,涵盖了字符串、数值、日期时间、大对象以及Oracle的特殊类型ROWID和UROWID。特别指出,Oracle没有内置布尔类型,通常使用其他类型替代。

在Oracle中,表根据其系统级功能可分为如下5种类型:

  • 标准表:最基础、最常用的数据库表类型,是在默认情况下创建的表。表种的数据按堆进行组织,以无序方式存放在单独的表段中
  • 临时表:与标准表非常相似,但是临时表仅用来保存一个会话中的临时数据,当会话推出或者用户提交或回滚事务时,临时表中的数据自动被清空
  • 索引表:用来增强检索性能的表,通常不会用来存储标准的数据,这种表以B树结构存放在索引段中
  • 簇表:通常用来节省存储空间并提高SQL语句执行的性能,簇是由共享相同数据块的一组表组成的
  • 分区表:将一个大的表划分成更小的分区,并存储到相应的分区段中,每个分区段可以独立管理和操作

表名和列名包含如下几个命名规则:

  • 表名和列必须以字母开头,长度在1~30个字节之间,至少为一个字节
  • 表名和列名中可以包含字母、数值、下划线(_)、美元($)和英镑符号(£),但是Oracle不建议在名称中使用英镑和美元符号
  • 不能再表或列的命名中使用Oracle的保留字,比如 VARCHAR 或 INDEX 这类Oracle的保留字来进行命名
  • 如果在表或列的命名时,名称被包围在双引号中,要求名称的长度在1~30个字符之间,并且不含有一个嵌入的双引号
  • 在一个表中创建列时,列命名不能与表中其他的列重复,但是不同表之间的列命名是可以相同的
  • 表在其名称空间中不能出现同名,表的名称空间包含表、视图、序列、专用同义词,在这些对象中只要出现了相同的命名就会创建失败

注意:表名和列表是不区分大小写的,在内部Oracle会将创建的表名称的列表转换为大写然后存储到Oracle数据字典表中

列数据类型

Oracle内置了多种列数据类型,这些类型根据存储数据的不同可以分为如下几种类型:

  • 字符串类型,用来存储字符串类型的数据,包含 CHAR、NCHAR、NVARCHAR2、VARCHAR2 等数据类型
  • 数值类型,用来存储整数或浮点数值,主要的数据类型时 NUMBER 及相关的子类型比如 INTER、FLOAT 等
  • 日期时间类型,用来存储日期时间数值及时间段数值,它包含 DATE、TIMESTAMP、INTERVAL YEAR TO MONTH 等数据类型
  • 大对象类型,用来存储大型二进制对象,比如大型文本、图像、声音或视频等数据,包含 CLOB、NCLOB、BLOG、BFILE 等类型

除了这些类型之外,Oracle还额外包含了两个非常重要的行数据类型 ROWID 和 UROWID ,这两个类型由Oracle隐式设定,一般不需要用户进行创建,Oracle中的内置类型如表所示:

数据类型描述
VARCHAR2(SIZE [BYTE | CHAR])变长字符串类型,size 属性用来指定字符串长度,可以指定是使用 Byte 单位还是 Char 单位来存放字符串。默认以 Byte 为单位,最大可存储 4000 个字节。如果以 Char 作为存储单位,由于在不同的字符集平台上一个字符可能由多个字节组成,因此存储占用的空间比 Char 要大的多
NVARCHAR2(size)变长字符串类型的 Unicode 版本,可以支持国际字符集比如简体中文等,依据所选的国家字符集,其最大长度为 size 个字符或字节。size 的最大值取决于存储每个字符所需要的字节数,其上限为 4000 个字节。必须为 NVARCHAR2 指定一个 size
NUMBER[(p [, s])]用于存储零、整数,定长负数及浮点数。p 表示精度(1-38),它表示存储在列中数据在总长度是 p 位;s 表示范围,它表示小数点后的位数。该取值范围可以从 -84 到 127
FLOAT[(p)]NUMBER 乐星的子类型,主要用来存储浮点数值,p用来指定浮点数的精度,精度取值可以指定 1~126 之间的精度值
LONGLONG 类型的列存储可变长度的字符串,最多可以存储 2GB 的数据。LONG类型的列有很多在 VARCHAR2 类型列中所具有的特征。LONG 数据类型的使用是为了向前兼容的需要,建议使用 LOB 数据类型来代替 LONG
DATEDATE 类型用来存储时间和日期信息,包含世纪、年、月、日、小时、分钟、秒,但是不包含秒的小数部分。DATE 类型从世纪到秒每一个部分是一个字节,即占用7个字节。有效的日期范围从公元前4712年1月1日 到公元后9999年12月31日。日期的默认格式由 NLS_DATE_FORMAT 参数指定,大小为7个字节
TIMESTAMP[(fractional_seconds_precision)]使用年、月、日、小时、分钟、秒域来对日期/时间提供更详细的支持。最多可以使用 9 位数字的精度来存储秒(受底层操作系统支持的限制)。这个数据类型没有时区的相关信息。 fractional_seconds_precision 为可选项,指定秒的小数部分的精度,取值范围为 0~9 ,默认值为 6 
TIMESTAMP[(fractional_seconds)] WITH TIME ZONE数据类型可以指定时区的 TIMESTAMP。时区的偏移是指本地时间和格林尼治时间之间的差异(小时和分钟)。 
TIMESTAMP[(fractional_seconds)] WITH LOCAL TIME ZONETIMESTAMP WITH LOCAL TIME ZONE 数据类型也是可以指定时区的 TIMESTAMP ,和 TIMESTAMP WITH TIME ZONE 不同的是,它存储的是数据库的时区,时区偏移量并不存储
INTERVAL YEAR[(year_precision)] TO MONTH存储一个时间间隔,其单位为 年 和 月;可以通过指定可选的 years_precision 参数来指定年的精度,该参数是一个 0~9 的整数。默认精度为 2 ,意思是可以在时间间隔中为年数存储两位数字。如果试图向表中添加一行年数超过 INTERVAL YEAR TO MONTH 列可以存储的记录,就会返回一个错误,时间间隔既可以存储整数,也可以存储负数
INTERVAL DAY[(day_precision)] TO SECOND[(fractional_seconds)]存储在一个时间间隔,其单位为天和秒;可以通过指定可选的 day_precision 参数来指定天的精度,该参数是一个 0~9 的整数,默认值为2.另外,还可以通过指定可选的 seconds_precision 参数来指定秒的小数部分的精度,该参数是一个 0~9 d 整数,默认值为 6 .时间间隔既可以存储正数,也可以存储负数
RAW(size)类似于 CHAR 类型,最大可以存储 2000 字节 的数据,必须指定 size 参数的值
LONG RAW类似于 LONG ,最大存储 2GB 的数据
ROWID由Oracle自动生成的 Base64 的 18 位字符串,用来存储行地址信息,通常也称为 ROWID 伪列,每个数据库中都有一个 ROWID 伪列
UROWID[(size)]与 ROWID 类似,但是它表示的是索引组织表的行地址,索引组织表中的 ROWID 值是可能发生变化的
CHAR[(size[BYTE | CHAR])]定长字符串类型,它与 VARCHAR2 非常相似,不同之处在于字符串个数固定,如果不足 size 指定的字符串大小,会使用空格补齐,最大长度位 2000 个字节,BYTE 和 CHAR 的使用与 VARCHAR2 的语法相似
NCHAR[(size)]CHAR 类型的 Unicode 版本,用来支持双字节字符
CLOB用来在数据库中存储大型的字符型数据,支持定长和变长字符集。每一个 CLOB 变量存储一个定位器来指向大型的字符型数据,其大小也不可以超过 4GB 。从Oracle 9i 开始,可以将 CLOB 转换成 CHAR 和 VARCHAR2 类型
NCLOBNCLOB 的 Unicode 版本,支持国际字符集所定义的字符
BLOB二进制大型对象,最大可存储 (4GB-1) * (数据库块大小) 的二进制内容
BFELE存储执行数据库外部文件的定位符。外部文件最大为 4GB

注意:Oracle没有布尔类型,如果要表示布尔值,可以使用 CHAR(1) 或 INTEGER、NUMBER(1) 之类的类型进程替代

除了上面的类型之外,还有很多 NUMBER 类型的子类型,比如 INT、REAL、SMALLINT 等、这些类型分别表示整数、浮点数和短整数。在涉及数据库表时,必须注意字符串类型的两大类:以N开头的表示支持 Unicode 字符集的字符串类型,比如要存储国际字符集如简体中文文字,而没有 N 开头的 CHAR 和 VARCHAR2 则仅支持 ANSI 字符串,对于数值型来说,实际上只有一种 NUMBER 类型,通过它的长度和小数位来控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值