完整性的定义
是为保证数据库中数据的正确性和一致性。
分类
域完整性,实体完整性、参照完整性和用户定义完整性。
1.实体完整性 指关系的主关键字不为空且不重复
primary key 主键
2.域完整性 保证表中数据的合理性
check 检查
default 默认
not null 不为空
unique 唯一约束
3.参照完整性 指建立两个关系建立联系的主外键的约束
foreign key 外键
4.用户自定义完整性 除了上述关键字,可以使用触发器来编写约束
在创建表时添加约束
示例1 创建一个学生信息表,学号为主键,姓名不为空,性别只能为男或女,年龄在6岁到34之间,家庭地址默认为‘山东’,
create table student_info(
stuid number primary key,
name varchar(30) not null,
sex char(2) check(sex in( '男','女')),
age number(2) check(age between 6 and 34),
loc varchar(30) default '山东'
);
desc student; --查看表的结构
除了使用上面直接加在字段名之后的约束外,还可以使用约束子句 constraint
约束子句的语法:CONSTRAINT [constraint_name] CHECK (condition);
示例2 创建一个职工信息表,职工号为主键,职工姓名,性别为男或者女,年龄必须大于18,学历可以为 ‘高中’或‘大学’或‘无学历’。
create table emp_info1(
empid number,
name varchar(30),
sex char(2),
age number(2),
edu varchar(20),
constraint chk_empid1 primary key(empid), --主键约束,可以把多个字段设为主键
constraint chk_sex1 check (sex in('女','男')), --check约束
constraint chk_age1 check (age>=18),
constraint chk_edu check (edu in ('高中','大学','无学历'))
);
备注:约束名不可以与其他表的约束名重复,不然会提示 ORA-02264: 名称已被一现有约束条件占用
constraint子句可以写在字段名的后面。
比如
create table emp_info1(
empid number constraint chk_empid1 primary key,
name varchar(30),
sex char(2),
age number(2) constraint chk_age1 check (age>=18)
);
在创建完表后添加约束
创建完 一学生表之后,给此表添加一些约束
stuid
name age sex birthday
create table stu( --此表没有任何的约束
stuid number,
name varchar(20),
age number(2),
sex char(2),
birthday date
);
示例3 给上面的表添加 主键约束 (把studi设为主键)
alter table stu add contraint pk_stuid primary key(stuid);
示例4 给上面的表添加 check约束 (插入的年龄必须大于19岁)
alter table stu add contraint chk_age check(age>19);
示例5 给上面的表添加 非空约束 (要求姓名不能为空值)--非空约束与其他的不一样
alter table stu modify name not null;
示例6 给上面的表添加 唯一约束 (要求姓名不可重复)
alter table stu add constraint uni_name unique(name);
外键约束 用来建立表和表之间联系
学生表stu_info 学号 stuid,姓名 name,专业 major
成绩表score_info 编号 sno ,学号stuid,科目 course,分数 score
示例7 在创建表的时候添加外键约束
create table score_info(
sno number primary key,
stuid number,
course varchar(20),
score number,
constraint fk_stuid foreign key(stuid) references stu(stuid) --设为外键,关联stu_info(stuid)
);
示例8 在创建完表后添加外键约束
alter table score_info add constraint fk_stuid foreign key(stuid) references stu(stuid);
禁用约束:
ALTER TABLE 表名 DISABLE CONSTRAINT 约束名;
启用约束:
ALTER TABLE 表名 ENABLE CONSTRAINT 约束名;
删除约束:
ALTER TABLE 表名 DROP CONSTRAINT 约束名;