数据的完整性就正确性、准确型,包括三种:实体完整性、参照完整性和用户自定义完整性。
实体完整性就是某一列的数据应该在正确的取值范围内,例如学生表中的学号就不能为负数。
参照完整性就是外键的取值范围应该在关联表对应的列的取值范围内,例如学生表中的班级编号就应该在班级表的班级编号范围内。
用户自定义完整性就是某些列的取值应该在依据其他表或列的取值范围进行计算后的范围内,例如学生表中的出生日期应该比入学日期小。
Oracle中主要通过约束、触发器、过程函数实现数据的完整性。
维护数据的完整性主要有“not null”、“unique”、“check”、“primary key”、“foreign key”五种。
not null:非空,只能在列内定义。
unique:唯一,不能重复,但可以为空,但只能有一个空值。一个表可以有多个列为“unique”。即可以在列中定义,也能在表中定义
primary key:主键,不能重复也不能为空。一个表只能有一列是“primary key”。即可以在列中定义,也能在表中定义
foreign key:外键。
check:可以按照用户要求自动检查。
SQL> create table t3(bianhao number(5) not null check (bianhao > 0 and bianhao < 100)); 表已创建。 //查看表的约束 select * from user_constraints where table_name = 'T3'; //查看表的约束对应的列 select * from user_cons_columns where table_name = 'T3'; //两列联合唯一。如一个班里一个学生号只能有一个学生,班级编号可以重复、不同班级里可以有相同编号的学生 create table t4(class_id number(3) not null,student_id number(3) not null,student_name varchar2(10),unique(class_id,student_id)); //设置列的默认值 create table t5(id number(5),name varchar2(5),gongzi number(8,2) default 1000); //给带默认值的列赋值的两种方式 insert into t5 values(1,'Tom',default); insert into t5(id,name) values(2,'Jim'); //创建主键 create table student2(id number(5) primary key,name varchar2(5)); //创建外键,关联另一个表的主键 create table address2(id number(5),address varchar2(20),foreign key(id) references student2(id)); //创建主键的5种方式.第一种:在列中定义 create table user1(userid number(10) primary key,username varchar2(20)); //第二种:在列中定义,同时定义约束名 create table user2(userid number(10) constraint pk_01 primary key,username varchar2(20)); //第三种:在列定义后定义 create table user3(userid number(10),username varchar2(20),primary key(userid)); //第四种:在列定义后定义,同时定义约束名 create table user4(userid number(10),username varchar2(20),constraints pk_02 primary key(userid)); //第五种:先创建表,再添加主键 create table user5(userid number(10),username varchar2(20)); alter table user5 add constraints pk_03 primary key(userid); //删除约束 alter table user2 drop constraint pk_01; //删除主键 alter table user1 drop primary key; //如果出错:ORA-02273:此唯一/主键以被某外键引用,可以 alter table user1 drop primary key cascade; //删除主键被引用的表 drop table user1 cascade constraints; //暂时禁用主键。禁用主键后可以在该列插入重复的值。 alter table user3 disable primary key; //恢复主键。若在禁用主键期间插入了重复值,恢复主键时会报错:“违反主键” alter table user3 enable primary key;