一.数值类型
:数值类型是Oracle中最常用的数据类型之一.它用于存储整数或带有小数点的数字.number类型可以指定精度(precision)和标度(scale),既可以存储的最大数和小数点后精确的位数number(p,s)
p:有效数字的位数
s:小数位数
最多存储38位有效数字
例如:number(3,1) 21.5 31.0
:整数类型是number类型的一种特殊形式,用于存储不带小数的整数.它占用较小的存储空间,适用于存储空间要求较高的场景
integer
最大存储38位整数,会四舍五入
:浮点数类型用于存储近似值,具有比number更大范围和较低的精度要求.float类型可以指定二进制位数(precision)和十进制位数(scale)
4.binary_float和binary_double:二进制浮点数类型分别用于存储单精度和双精度浮点数.它们提供了更高精度的科学计算和工程领域(了解,不常用)
二.字符类型
(1)字符型(字符串型)
①定长字符串:char
长度固定,会用空格填充达到其最大长度,当没有指定长度时,默认为1
例如:char(5) 男 ,12345,abcde
注:Oracle中一个中文3字节,一个字母或一个数字1字节
②变长字符串:varchar2,nvarchar2
varchar2:变长字符串
长度会自动减小,按UTF8格式存储
例如:varchar(20) 存"张三",长度变成6
nvarchar2:变长字符串
长度会自动减小,按UNICODE编码方式存储
例如:nvarchar2(20) 存"张三",长度变成2
③long:超长字符串,最大存储2000M字节信息
(2)char和varchar2的比较
char(10),如果存入'freecplus',在数据库中将存储'freecplus ',在最后补了一个空格。
varchar2(10),如果存入'freecplus',在数据库中将存储'freecplus',什么也不会补。
在实际应用中,我们并不希望Oracle给字符串后面补空格,那么是不是可以弃用char类型呢?不是,我们一般用char类型存放固定大小的数据内容,例如身份证号码,固定是18位的,用char(18)就非常合适,能用varchar2(18)可以存放身份证号码吗?当然可以,但是,char(18)的效率比varchar2(18)的效率要高很多。
总结一下,如果确定、肯定、一定、保证存入字符串的长度是固定不变的,例如性别、身份证号码、手机号码,用char类型,否则用varchar2类型,例如姓名、学历、地址、兴趣爱好等,char虽然死板,但是效率高。
三.日期类型
①date:日期时间类型
可以存储世纪,年,月,日 时:分:秒
例如:2023-12-05 12:23:45
②timestamp:时间戳
可以存储到毫秒,用小数秒表示
例如:2023-11-14 10:15:29.452
③interval:时间间隔类型
用于存储两个日期或时间之间的差异.它可以表示年.月.日.小时.分钟或秒之间的差异.
四、clob和blob类型
clob类型,变长的字符串大对象,最长可达4GB,clob可以存储单字节字符串或多字节字符串数据,clob被认为是一个更大的字符串。当数据库的字符集发生转换时,clob类型会受到影响。
blob类型,变长的二进制大对象,最长可达4GB,blob主要用于保存带格式的非结构化数据,如图片、音频、视频、Office文档等。当数据库的字符集发生转换时,blob类型不会受到影响,Oracle数据库不关心存放的是什么内容。
五、rowid类型
Oracle数据库中每个表的每行记录都有一个存储的物理位置,即表的rowid伪列,采用rowid作为where条件的访问效率最高。
rowid的访问效率虽然是最高的,但是,在实际应用中要谨慎,需要注意两个问题:
(1)rowid存放的是表记录的物理位置,在数据整理、数据备份和迁移的时候,记录的物理位置会发生改变;
(2)rowid是Oracle数据库专有的数据类型,与其它的数据库不兼容。
六.汉字的存储
每个汉字占多少字节要看具体的编码方式,如UTF-8(1-3字节)、GB2312(2字节)、GBK(2字节)、GB18030(1、2、4字节)。
七.创建表
(1)SQL语句建表
create table 表名(
字段 数据类型(大小) 约束,
字段 数据类型(大小) 约束,
...
字段 数据类型(大小) 约束
);
create table teacher(
t_no varchar2(10) primary key,
t_name varchar2(20),
t_age number(3),
t_sex char(5),
t_born date
);
(2)SQL创建约束(可在建表时创建)
①主键约束
alter table 表名 add constraint 主键名
primary key(主键字段名);
②外键约束:
alter table 表名 add constraint 外键名
foreign key(外键字段名) references
参考表名(参考主键字段名);
③唯一约束
alter table 表名 add constraint 唯一约束名
unique(约束字段名);
④默认约束
alter table 表名 Modify 字段名
数据类型(长度) default('值');
⑤检查约束
alter table 表名 add constraint 检查约束名
check(约束条件);
⑥添加注释
表注释:comment on table 表名 is '注释名';
列注释:comment on column 表名.列名 is '注释名'
create table score(
s_id number(10),
s_name varchar2(20),
s_p number(10),
s_sum number(10),
t_no varchar2(10)
);
//主键约束
alter table score add constraint PK_id primary key(s_id);
//唯一约束
alter table score add constraint UN_sname unique(s_name);
//外键约束
alter table score add constraint FK_no foreign key(t_no) references teacher(t_no);
//默认约束
alter table score modify s_p number(10) default 20;
//检查约束
alter table score add constraint CK_sum check(s_sum>=0 and s_sum<=100);