一、常用的数据类型
1、 字符型:
varchar2:0--4000B 可变长的字符串
nvarchar2:0--1000B 用来存储Unicode字符集的变长字符型数据
char :0--2000B 用于描述定长的字符型数据
nchar:0--1000B 用来存储Unicode字符集的定长字符型数据
long:0--2GB 用来存储变长的字符串
2、数字型
number(p,s) p最大精度是38位(十进制) p是精度,s是保留的小数位数,可以用来存储定长的整数和小数
float 用来存储126位数据(二进制) 存储的数度是二进制计算的,精度范围为二进制数的1-126,在转换为十进制数时需要乘以0.3.103
3、日期类型
date 用来存储日期和时间,范围在公元前4712年1月1日到公元9999年12月31日
timestamp 用来存储日期和时间,与date类型的区别就是它在显示日期和时间时更精确,date可以精确到秒,而timestamp可以显示上/下午,并精确到小数秒
4、其他数据类型
blob 最多存放4GB 存储二进制数据
clob 最多存储4GB 存储字符串数据
bfile 大小与操作系统有关 用来把非结构化的二进制数据存储在数据库以外的操作系统文件中
二、dual表
dual表仅含有一行一列,该表并不是为了存储数据而创建的,其存在的意义在于提供强制的数据源。在进行与具体的表无关的运算符进,可以在from子句中指定dual表
eg:
select sysdate from dual;
select 11*27 as result from dual;
三、各种约束
在oracle中除not null约束外,其他的主键约束,外键约束,唯一性约束,检查约束都可通过add子句添加,not null只能通过alter命令的modify子句来添加。
约束的根本目的在于保持数据的完整性,数据完整性是指数据的精确性和可靠性,即数据库中的数据都符合某种预定义的规则。
在创建表后添加约束,若表中已有数据不满足约束,则约束无法添加,所以,最好在创建表的同时定义约束。
数据库的完整性:
域完整性:not null约束,唯一性约束,检查约束
实体完整性:主键的约束(关系中记录唯一性) primary key
参照完整性:对外键的约束(外键要是另一表的主键)
通过表名,在数据字典(user_constraints)中查看约束信息:
select table_name,constraint_name,constraint_type,status from user_constraints where table_name='表名';
通过约束名,在数据字典(user_cons_columns)上查看建立在列上的约束
select constraint_name,table_name,column_name from user_cons_columns where constraint_name='约束名'
1、主键约束
当oracle创建一个主键时,会自动创建一个与主键同名的索引,并且索引列与主键列相同,但当用户重命名主键后,索引不会随之重命名,当主键删除后,索引会随着被删除,
添加主键约束
alter table 表名 add constraint 约束名 primary key(列名1,列名2,..............)
禁用/启用主键
alter table 表名 enable/disable primary key 启用时,约束会检查已有值是否满足约束条件,不满足则无法启用
重命名主键
alter table 表名 rename constraint 原主键名 to 新主键名
删除主键
alter table 表名 drop primary key
2、外键约束
在表上定义的外键可以指向主键或者其他表的唯一键
添加外键约束
alter table 子表 add constraint 外键名 foreign key(列名) references 主表(列名) on delete cascade ---------------on delete cascade设置级联删除,在主表删除数据时,会级联删除从表的对应数据
3、唯一性约束(unique)
唯一性约束可以建立在列或者列的组合上,可以作为主键约束的补充,唯一性约束与主键约束很相似,不同的是,唯一性约束在一个表中可有多个,主键约束在一个表中只能有一个,对于unique约束的列,表中不允许有两行包含相同的非空值。
添加唯一性约束
alter table 表名 add constarint 唯一性约束名 unique(列名1,列名2,...............)
重命名唯一性约束
alter table 表名 rename constraint 原约束名 to 新约束名
禁用/ 启用唯一性约束
alter table 表名 disable/enable constarint 约束名
删除唯一性约束
alter table 表名 drop constarint 唯一性约束名
4、检查约束
检查约束是针对 列值本身进行限制
检查约束可以通过很灵活的约束条件来完成约束任务,但是不能过多使用检查约束,尤其是复杂的约束条件,因为针对每条记录的插入或更新操作,都需要进行检查约束的校验,并耗费大量资源,
添加检查约束
alter table 表名 add constarint 检查约束名 check(条件)
5、非空约束
添加非空约束
alter table 表名 modify 列名 not null
撤销非空约束
alter table 表名 modify 列名 null
6、默认约束
添加默认约束
alter table 表名 modify 列名 default<default_value>
删除默认约束
alter table 表名 modify 列名 default null;
在数据库中,某些列的值可能是null,null就是空,在数据库中含有空值的列长度为零,具体来讲,null与0、空字符串、空格都不同,null是未知数,在where子句中,判断一个值是否为null,只能使用is(not) null 判别式,
eg:select * from employee where not dep='us' or dep is null;