常用的数据类型
数字类型
number 类型
即可以用于存储整数,也可以存储小数
number 是一个可变长度的数据类型,并且始终保持四舍五入的原则
number 可以指定两个参数 number(p,s):
p表示有效位,从左边第一个非0的数字开始数,到结尾的长度,取值范围:1 ~ 38
s表示小数位,取值范围:-84 ~ 127
例如:
number(3) 相当于 number(3,0),取值范围为:-999~999
number(3,2) 只能存储:0.01 ~ 9.99 和 -0.01 ~ -9.99
number(3,3) 只能存储:0.001 ~ 0.999 和 -0.001 ~ -0.999
number(2,3) 只能存储:0.001 ~ 0.099 和 -0.001 ~ -0.099
number 可以表示的数值范围:-1.0e-130 ~ 1.0e+126,占用空间为1 ~ 22 个字节
其它数字类型:都属于 number 类型的“变种”,而且使用 number 类型都能替代这些数据类型
| 类型 | 描述 | 存储描述 |
|---|---|---|
| DECIMAL(P,S) | 数字类型 | P为有效位,S为小数 |
| INTEGER | 整数类型 | 小的整数 |
| FLOAT | 浮点数类型 | NUMBER(38), 双精度 |
| REAL | 实数类型 | NUMBER(63), 精度更高 |
字符类型
CHAR
用于存储固定长度的字符串,一个空间占用1个字节,最多存储2000个字节
即:char(2000),这里的2000表示字节数。通常也就是1000个汉字,或者2000个字母、数字等
注意:不足指定长度,便以空格的字节补齐
NCHAR
根据字符集而定的固定长度字符串。用于存储固定长度的字符串,一个空间占用2个字节,最多存储2000个字节
即:nchar(1000),注意这里的1000表示字符数。为什么说是字符数呢?N表示是以 unicode 编码格式存储,无论中文或英文、数字都以一个字符(2个字节)来存储,这也是 CHAR 与 NCHAR 最大的区别
VARCHAR2
VARCHAR2 与 CHAR 类似,不同的是 VARCHAR2 用于存储可变长度的字符串
最大长度是 CHAR 的两倍,也就是4000个字节,即:varchar2(4000) ,通常也就是2000个汉字,或者4000个字母、数字等
NVARCHAR2
根据字符集而定的可变长度字符串
NVARCHAR2 与 NCHAR 类似,不同的是 NVARCHAR2 用于存储可变长度的字符串。最大长度是 NCHAR 的两倍,也就是4000个字节,即:nvarchar2(2000) ,通常也就是2000个汉字、字母、数字等
小结:四种字符类型比较:
| 类型 | 变长 | 一个空间占用字节数 | 最大字节数(bytes) | 适用场景 |
|---|---|---|---|---|
| CHAR | 否 | 1 | 2000、 char(2000) | 定长:英文、数字 |
| NCHAR | 否 | 2 | 2000, nchar(1000) | 定长:中文 |
| VARCHAR2 | 是 | 1 | 4000, varchar2(4000) | 变长:英文、数字、中文 |
| NCARCHAR2 | 是 | 2 | 4000, ncarchar2(2000) | 变长:中文 |
注意:
对于中文,在这四种类型中存储,都是占2个或2个以上字节
对于英文或数字,在 CHAR 和 VARCHAR2 中占一个字节,在 NCHAR 和 NVARCHAR2 中占两个字节
char 的优势。当我们存储已知固定长度的数据时,比如:手机号(11位)、身份证号码(18位)等,可以考虑使用 char。因为,在查询数据时,对于 char 类型字段,是全字符整体匹配;而 varchar2 是一个字符一个字符的进行匹配。所以,从查询效率上,char 要比 varchar2 高
汉字占用几个字节,是根据 ORACLE 中字符集编码决定,一般情况,数据库的 NLS_CHARACTERSET 为 AL32UTF8 或 UTF8,一个汉字占三到四个字节;如果 NLS_CHARACTERSET 为 ZHS16GBK,则一个字符占两个字节
日期类型
DATE
date 用于存储日期和时间类型,date 类型的默认格式为:DD-MM-YYYY,当我插入熟悉的 YYYY-MM-DD 格式时,需要进行格式转换。
TIMESTAMP
时间戳类型,与 DATE 相比较,TIMESTAMP 类型具有小数位毫秒数,比 DATE 的精度更高
大数据与二进制类型
LONG
用于存储可变长度的超长字符串,最大长度为2G,通常用于存储备注字段,或者 varchar2 和 nvarchar2 不够存储时
CLOB
CLOB 是一种字符型大型对象(Character Large Object),最大长度为4G,存储与字符集相关
NCLOB
根据字符集而定的字符数据,最大长度为4G
BLOB
BLOG 是一种二进制大型对象(Binary Large Object),最大长度为4G,适用于存储非文本的字节流数据,如:视频、音频等。
注意:由于视频、音频文件存储在数据库中会进行转码(压码、解码),所以通常并不会将这些数据存储在数据库中。但是存储在数据库中会比较安全。
RAW
固定长度的二进制数据,最大长度 2000个字节,可存储多媒体视频、音频格式等
LONG RAW
可变长度的二进制数据,最大长度2G,与 RAW 类似。
BFILE
存储在数据库之外的二进制数据,最大长度4G。
ROWID
行地址,十六进制串,表示行在所在的表中唯一的行地址,该数据类型主要用于返回ROWID伪列,常用在可以将表中的每一条记录都加以唯一标识的场合。数据表中记录的唯一行号,占10个字节
NROWID
二进制数据表中记录的唯一行号,最大长度4000个字节
表管理
建表格式:
CREATE TABLE 表名称(列名称 数据类型 ,.….)
修改表名格式:
RENAME 原表名称 TO 新表名称;
添加字段格式:
ALTER TABLE 表名称 ADD 新列名称 新列的数据类型;
更改字段类型格式:
ALTER TABLE 表名称 MODIFY 列名称 新的数据类型;
删除字段格式:
ALTER TABLE 表名称 DROP COLUMN 列名称;
清空表数据格式:
TRUNCATE TABLE 表名称
删除表格式:
DROP TABLE 表名称
约束管理
非空约束NOT NULL格式:
-- 创建表设置非空约束CREATE TABLE 表名称(列名称 数据类型 NOT NULL ....);-- 修改表设置非空约束ALTER TABLE 表名称 MODIFY 列名称 数据类型 NOT NULL;ALTER TABLE 表名称 MODIFY 列名称 数据类型 NULL;
主键约束PRIMARY KEY格式:
-- 创建表设置主键CREATE TABLE 表名称(列名称 数据类型 PRIMARY KEY,....)-- 修改表设置主键ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 PRIMARY KEY(列名称1, ... );
外键约束FOREIGN KEY 格式:
-- 创建表设置外键CREATE TABLE 表名称(列名称 数据类型 REFERENCES 主表名称 (主键列),…);-- 修改表设置外键ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 FOREIGNKEY(列名称) REFERENCES主表名称(主键列) [ON DELETE CASCADE]
唯一约束UNIQUE格式:
-- 创建表设置唯一约束CREATE TABLE 表名称(列名称 数据类型 UNIQUE,...);-- 修改表设置唯一约束ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 UNIQUE(列名称)
检查约束CHECK格式:
-- 创建表设置检查约束CREATE TABLE 表名称(列名称 数据类型 CHECK(表达式),...);-- 修改表设置检查约束ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 CHECK(表达式)




