Oracle的完整性与约束
完整性
解释
数据完整性是指数据的精确性和可靠性,它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
分类
实体完整性 实体完整性要求每一个表中的字段都不能为空或者重复的值。 通过主键约束,唯一约束实现实体完整性
域完整性 域完整性又称为列完整性,指定一个数据集对某一个列是否有效和确定是否允许空值。 通过默认值约束、非空约束、check约束实现域完整性。
参照完整性 参照完整性是指通过定义一张表中外键与另一张表中主键之间的引用规则来约束这两张表之间的联系。 有参照完整性的两张表,当修改一张表的外键(增删改)时,系统会自动对照另一张表中的主键,从而阻止一些不正确的数据的操作。 通过外键约束实现。
自定义完整性 解释 自定义完整性则是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出约束性条件。这一约束机制一般不应由应用程序提供,而应由关系模型提供定义并检验,用户定义完整性主要包括字段有效性约束和记录有效性。
自定义完整性通过存储过程和触发器实现。
约束
定义
指定表中一列或多列可以接受的数值格式
分类
非空约束 not null–防止null值进入指定的列,在单列基础上,默认情况下,Oracle允许在任何列中有NULL值。
检查约束 检查在约束中指定的条件是否得到了满足。
唯一约束 保证在指定的列中没有重复值。在该表中每一个值或每一组值都是唯一的。
主键约束 用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束。
外键约束 通过使用公共列在表之间建立父子关系,在表中定义的外键可以指向另一个表的主键或唯一键。
约束的建立
主键约束
方法一 create table tablename( name varchar2(20) primary key ); 方法二 create table tablename( name varchar2(20) , constraint pri_name primary key(name) ); 方法三 alter table tablename add constraint pri_name primary key(name);
使用constraint可以指定约束名,不使用,系统自动创建约束名。
外键约束
方法一 create table tablename( name varchar2(20) references tablename2(name2) ); 方法二 create table tablename( name varchar2(20) , foreign key(name) references tablename2(name2) ); 方法三 alter table tablename add constraint name_pk foreign key(name) references tablename2(name2);
使用constraint可以指定约束名,不使用,系统自动创建约束名。
唯一约束
方法一 create table tablename( name varchar2(20) unique not null );
方法二 create table tablename( name varchar2(20) ,
constraint name_uq unique(name) ); 方法三 alter table tablename add unique(name);
唯一键可以是多个字段组合,联合字段中可以包含空值。不加constraint,系统会起一个默认名。
检查约束
方法一 create table tablename( name varchar2(20) not null check(name in (‘男’,‘女’)) );
方法二 create table tablename( name varchar2(20) , check(name in (‘nan’,‘nv’)) );
方法三 alter table tablename add check(name in (‘data1’,‘dart’));
同样的constraint可以给约束起名。 规定只能是某些值可以用col in(‘data’,number……)
在某数值之间between num1 and num2 左开右开
必须是大写 col=upper(col)
必须有字母或者数字 col like ‘%[0-9]%’ or col like '%[a-z]%
不小于某个数值col<>2
|