Oracle学习——数据类型、约束类型
在Orcale数据库中,对于字段的属性我们会在建表时给定。下面将介绍数据库中有哪些常见的列属性和对列的一些约束。
数据类型
一、CHAR / VARCHAR2 / NVARCHAR2
以上三个都是字符串类型,他们之间有以下区别:
- CHAR是不可变字符类型,在定义时需要规定所占字节长度,例:CHAR(10),表示字节长度为10。
- VARCHAR2表示可变字符类型,在定义时只需要规定最大字节长度即可,例:VARCHAR2(10)。
- NVARCHAR2也表示可变类型,不过定义时规定的是最大字符长度(采用UNICODE编码,中文占3字节,字母数字占1字节),例如:NVARCHAR2(10)。
注意一下CHAR(10)的平时使用中,如果输入的字符并没有达到设定的字节长度,那么系统会自动在末尾补充空格,从而导致在筛选的时候可能会导致问题(例如我输入“a”,但是系统会自动补全为“a ”,当我使用“a”来进行筛选是就筛选不到)。因此常见CHAR的使用就是CHAR(1)。可变字符类型就不存上述问题,因此常见使用VARCHAR2。
二、NUMBER / INTEGER
这两种类型表示的是常见数字类型。NUMBER(p,s)定义时p表示整数位数的长度(最大38),s表示小数位数长度。INTEGER等价为NUMBER(38,0),用来存储整数,若插入数据有小数则会被四舍五入。
三、DATA / TIMESTAMP
以上表示日期的数据类型。DATA是最常见的数据类型,字符或者数字类型可以表示日期和时间信息,但是DATA日期数据类型具有特殊关联的属性,Orcale会储存世纪、年、月、日、时、分、秒的信息。TIMESTAMP类型必DATA类型更宽泛,它包含了小数秒的内容。默认的日期显示格式为DD-MM-YY。我们可以使用以下两个保留字来得到时间:
- sysdate:返回当前系统日期和时间,精确到秒
- systimestamp:返回当前系统日期和时间,精确到毫秒
这里我们需要了解的是,Orcale数据库中只要是时间格式都是以同一格式储存,只不过显示格式不同而已,可以使用to_char(时间格式,,'format')将时间转化为字符串,使用to_data(字符串,'format')将字符串转化为内部时间储存格式。
四、CLOB / BLOB
储存大内容的数据类型。CLOB采用二进制储存单字节和多字节字符数据,最大储存长度为4GB。BLOB也是采用二进制来储存非结构化的大对象,比如图片、声音、视频等,最大长度4GB。
其实存储更大数据也可以使用LONG RAW类型,这个能储存2GB的原始二进制文件。
约束类型
一、主键约束
被定为主键约束的列,不能有空值、并且值是唯一。如果在插入过程中插入了空值或者插入了已有的值,则会在插入时报错。(主键约束可以是多个列,这样就是需要所有列的值都一样才被认为是一样——笛卡尔积类型)。
二、唯一性约束
唯一性约束的列,只需要保证该列值是唯一的,可以为空值。
三、外键约束
需要建立两个表之间的关系,表A的a列添加了表B的b列外键约束,则表A的a列的所有值都需要是表B的b列的值。这里需要注意的是表B的b列一定要是表B的主键才行。但是表A的a列的数值是可以为空的,这就表示这条数据与表B那边的b列没有关系。
四、检查约束
对某一列设定用户自己的检查策略,比如范围,类型,常使用在年龄、性别的约束上。