您的位置:首页 > 数据库 > Oracle

Oracle完整性约束

2015-11-24 15:47 585 查看
替代变量练习:

1、人工输入员工的职位及工资(高于输入工资)信息,查询员工的编号、姓名、职位、雇佣日期、工资。

select * from emp where job=upper(‘&job’) and sal > &sal

2、人工输入员工姓名的关键字,查询员工编号、姓名、职位、雇佣日期、工资。比如输入S,所以姓名中有S的员工都查询出来了。

select * from emp where ename like upper(‘%&column%’)

3、尝试一下,在group by子句能不能使用替代变量?

select deptno from emp group by &column having deptno = &deptno

数据库完整性实验

1、建立数据表

到了秋天,学校开始筹备秋季运动会,为了方便保存比赛成绩信息,所以定义如下几张表,

表名称 字段名称 约束名称 描述

运动员表(sporter)

运动员编号(sporterid) primary key 主键

运动员姓名(name) not null 不能为空

运动员性别(sex) check 只能是男或女

运动员所在系(department) not null 不能为空

(项目编号)itemid primary key 主键

项目表(item)

(项目名称)itemname not null 不能为空

(举办场地)location not null 不能为空

成绩表(grade)

(运动员编号)sporterid foreign key 外键,要与运动员表的sporterid对应

(项目编号)itemid foreign key 外键,要与项目表的itemid对应

(项目成绩)mark check 成绩取值范围:6、4、2、0

Sporter表

create table sporter(
sporterid number(6) primary key,
name varchar(20) not null,
sex varchar(2) not null,
department varchar(30) not null,
constraint ck_sex check(sex in('男',' 女'))
)


Item表

create table item (
itemid number(6) primary key,
itemname varchar(20) not null,
location varchar(50) not null
)


Grade表

create table grade(
sporterid number(6) not null,
itemid number(6) not null,
mark number(1) not null,
constraint ck_mark check(mark in(0,2,4,6)),
constraint foreign_key_sportid foreign key (sporterid) references sporter(sporterid),
constraint foreign_key_itemid foreign key (itemid) references item(itemid)
)


查询已经有的约束用这条语句:

select constraint_name,constraint_type,table_name
from user_constraints
where table_name in('SPORTER','ITEM','GRADE')
order by table_name;


CONSTRAINT_NAME                C TABLE_NAME
------------------------------ - ---------------------
FOREIGN_KEY_SPORTID            R GRADE
SYS_C0011054                   C GRADE
SYS_C0011060                   C GRADE
SYS_C0011055                   C GRADE
CK_MARK                        C GRADE
FOREIGN_KEY_ITEMID             R GRADE
SYS_C0011052                   C ITEM
SYS_C0011051                   C ITEM
SYS_C0011053                   P ITEM
SYS_C0011047                   C SPORTER
CK_SEX                         C SPORTER
SYS_C0011059                   C SPORTER
SYS_C0011050                   P SPORTER
SYS_C0011048                   C SPORTER

已选择14行。


进行各种验证

非空验证、check验证,

主外键验证:

(1)先向成绩表插入数据,行不行?

insert into grade values(1,2,2)


第 1 行出现错误:
ORA-02291: 违反完整约束条件 (SCOTT.FOREIGN_KEY_ITEMID) - 未找到父项关键字


(2)删除运动员表的一行(一个已经有成绩的运动员),能不能删除?为什么?

delete item where itemid=101501


第 1 行出现错误:
ORA-02292: 违反完整约束条件 (SCOTT.FOREIGN_KEY_ITEMID) - 已找到子记录


实验注意

1、关于主键的约束

itemid number(6) primary key


2、关于外键的约束

constraint foreign_key_itemid foreign key (itemid) references item(itemid)


3、关于非空的约束

sporterid number(6) not null,


select * from view_test where age is null; //检测是否为空值


4、唯一性约束

reate table aa3(id number(10),
name varchar2(20),
company varchar2(20),
constraint [ConstraintName] unique(id)  #ConstraintName:约束名


5、关于用户输入限制的约束

constraint ck_sex check(sex in('男',' 女'))
constraint ck_mark check(mark in(0,2,4,6))


6、约束的禁用与启用

1、约束的禁用

Alter table 表名 disable constraint 约束名 cascade;

在主外键约束中,先禁用外键,再禁用主键。


2、约束的启用

Alter table 表名 enable constraint 约束名 cascade;

在主外键约束中,先启用主键,再启用外键
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle