Oracle学习(五)
10、Oracle中的数据类型
10.1字符类型
字符串数据类型还可以依据存储空间分为固定长度类型(CHAR)和可变长度类型(VARCHAR2/NVARCHAR2)两种。
10.1.1CHAR类型
CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。
10.1.2VARCHAR2类型
变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。
10.1.3NVARCHAR2类型
这是一个包含UNICODE格式数据的变长字符串。NVARCHAR2最多可以存储4,000字节的信息。
10.2数字类型
10.2.1NUMBER类型
NUMBER(P,S)是最常见的数字类型。P是Precision的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字。S是Scale的英文缩写,表示小数点数字的位数。
10.2.2INTEGER类型
INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。
10.3浮点数
10.3.1BINARY_FLOAT类型
BINARY_FLOAT是32位、单精度浮点数字数据类型。可以支持至少6位精度,每个BINARY_FLOAT的值需要5个字节,包括长度字节。
10.3.2BINARY_DOUBLE
BINARY_DOUBLE是为64位,双精度浮点数字数据类型。每个BINARY_DOUBLE的值需要9个字节,包括长度字节。
10.4日期类型
10.4.1DATE类型
DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle存储以下信息:世纪、年、月、日期、小时、分钟和秒。一般占用7个字节的存储空间。
10.4.2TIMESTAMP类型
这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位。
10.4.3TIMESTAMP WITH TIMEZONE类型
这是TIMESTAMP类型的变种,它包含了时区偏移量的值。
10.4.4TIMESTAMP WITH LOCAL TIMEZONE类型
将时间数据以数据库时区进行规范化后进行存储
10.5LOB类型
10.5.1CLOB类型(Character Large Object)
二进制数据,存储单字节和多字节字符数据。最大长度4G。
10.5.2BLOB类型(Binary Large Object)
它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。最大长度4G。
10.5.3NCLOB数据类型
存储UNICODE类型的数据,最大长度4G。
10.6LONG&RAW&LONGRAW类型
10.6.1LONG类型
它存储变长字符串(超长字符串),最多达2G的字符数据(2GB是指2千兆字节,而不是2千兆字符)。
10.6.2LONGRAW类型
能存储2GB的原始二进制数据,可存放多媒体图象声音等。
10.6.3RAW类型
用于存储二进制或字符类型数据,必须制定长度。这种数据类型存储的数据不会发生字符集转换。可存放多媒体图象声音等。
11、Oracle表名命名规则
要求
- 必须以字母开头
- 长度不能超过30个字符
- 避免使用Oracle的关键字
- 只能使用A-Z、a-z、0-9、_#$
Oracle在创建表时,表名会自动转换大写。Oracle对表名大小写不敏感。
如果在定义表名时含有特殊符号,或者用小写字母来定义表名则需要在表名两侧添加双引号。(此时命名规则将不受限制,故较少使用)
12、Oracle数据库中的约束
12.1约束的作用
约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止。
约束名称规则:“表名_约束类型缩写_列名”或“表名_约束类型缩写”
12.2约束类型
12.2.1主键约束(Primay Key Constraint)
唯一性,非空性。
12.2.2唯一约束(Unique Constraint)
唯一性,可以空,但只能有一个。
12.2.3检查约束(Check Constraint)
对该列数据的范围、格式的限制(如:年龄、性别等)。
12.2.4非空约束(Not Null Constraint)
该列不允许包含空值。
12.2.5外键约束(Foreign Key Constraint)
需要建立两表间的关系并引用主表的列。(外键允许有空值也允许重复)
其他说明:
13、Oracle数据库中表关系
设计关系数据库的一个重要部分是将数据元素划分为相关的表,我们可以根据数据本身的关联性,将不同表之间的数据聚合在一起。注意:无论在表与表之间建立了什么样的关系,决定数据之间是否有关系的不是表,而是数据本身。表与表之间一般存在三种关系,即一对一,一对多,多对多关系。
13.1一对多
一对多关系是建立在两张表之间的关系。一个表中的一条数据可以对应另一个表中的多条数据。
可以通过添加外键来实现两表之间的外键关系。
记住:外键永远在多方。外键允许重复,允许含有空值。
13.2一对一
一对一关系是建立在一对多的基础之上,外键可以在任何一方,需要让外键一方具备唯一约束即外键+唯一键约束就能实现。
13.3多对多
需要建立一个中间表,中间表里建立两个列,然后需要用这两个列作为这个表的联合主键,然后每个列在作为外键参照各自的表的主键。即在中间表中建立联合主键+表一外键约束+表二外键约束就能实现。
注意:
- 应该先创建两张表之后再创建两者的中间表,并且一般不存储业务数据
- 先在两张表中添加数据,再在中间表中添加数据
- 现在中间表中删除数据,再在两表中删除数据(先删除含有外键表的数据,一对多也是)
总结:
表关系 | 方法 |
---|---|
一对多 | 通过添加外键来实现两表之间的外键关系。外键永远在多方。外键允许重复,允许含有空值。 |
一对一 | 外键可以在任何一方,需要让外键一方具备唯一约束即外键+唯一键约束就能实现 |
多对多 | 建立中间表,在中间表中建立联合主键+表一外键约束+表二外键约束就能实现 |