Oracle的数据类型

一.数值类型

1.number:数值类型是Oracle中最常用的数据类型之一.它用于存储整数或带有小数点的数字.number类型可以指定精度(precision)和标度(scale),既可以存储的最大数和小数点后精确的位数number(p,s)
p:有效数字的位数
s:小数位数
最多存储38位有效数字
例如:number(3,1) 21.5 31.0

2.integer:整数类型是number类型的一种特殊形式,用于存储不带小数的整数.它占用较小的存储空间,适用于存储空间要求较高的场景

integer
最大存储38位整数,会四舍五入

3.float:浮点数类型用于存储近似值,具有比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);

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值