实验三 数据库完整性技术

create table S
(
Sno char(2) ,
Sname varchar(10) NOT NULL,
City char(6) default null,
primary key(Sno)
);

–创建p表
–定义p表; pno主码,pname非空、color只能取红、蓝、绿
create table P
(
Pno char(2),
Pname varchar(10) not null,
Color char(3) check(Color in(‘红’,‘蓝’,‘绿’)),
primary key(Pno)
);

–创建j表
–定义j表; jno主码, jname非空
create table J
(
Jno char(2),
Jname varchar(10) not null,
primary key(Jno)
);

–创建spj表
–定义spj表; (sno,pno,jno)主码,参照sno、pno、jno外码,qty介于0—1000
create table SPJ
(
Sno char(2),
Pno char(2),
Jno char(2),
Qty int ,
primary key(Sno,Pno,Jno),
foreign key(Sno) references S(Sno),
foreign key(Pno) references P(Pno),
foreign key(Jno) references J(Jno)
);
–插入合乎约束的数据
–向S表中插入数据
insert
into S(Sno,Sname,City)
values(‘S1’,‘竟仪’,‘天津’);

insert
into S(Sno,Sname,City)
values(‘S2’,‘盛锡’,‘北京’);

insert
into S(Sno,Sname,City)
values(‘S3’,‘东方红’,‘北京’);

insert
into S(Sno,Sname,City)
values(‘S4’,‘丰泰盛’,‘天津’);

insert
into S(Sno,Sname,City)
values(‘S5’,‘为民’,‘上海’);

–查询S表中的所有数据
select *
from S;

–向P表中插入有效数据
insert
into P(Pno,Pname,Color)
values(‘P1’,‘螺母’,‘红’);

insert
into P(Pno,Pname,Color)
values(‘P2’,‘螺栓’,‘绿’);

insert
into P(Pno,Pname,Color)
values(‘P3’,‘螺丝刀’,‘蓝’);

insert
into P(Pno,Pname,Color)
values(‘P4’,‘螺丝刀’,‘红’);

insert
into P(Pno,Pname,Color)
values(‘P5’,‘凸轮’,‘蓝’);

insert
into P(Pno,Pname,Color)
values(‘P6’,‘齿轮’,‘红’);

–查询p表中的所有数据
select *
from P;

–向J表中插入有效数据
insert
into J(Jno,Jname)
values(‘J1’,‘三建’);

insert
into J(Jno,Jname)
values(‘J2’,‘一汽’);

insert
into J(Jno,Jname)
values(‘J3’,‘弹簧厂’);

insert
into J(Jno,Jname)
values(‘J4’,‘造船厂’);

insert
into J(Jno,Jname)
values(‘J5’,‘机车厂’);

insert
into J(Jno,Jname)
values(‘J6’,‘无线电厂’);

insert
into J(Jno,Jname)
values(‘J7’,‘半导体厂’);
–查询J表中的所有数据
select *
from J;

–向SPJ表中插入有效数据
insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S1’,‘P1’,‘J1’,200);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S1’,‘P1’,‘J3’,100);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S1’,‘P1’,‘J4’,700);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S1’,‘P2’,‘J2’,100);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S2’,‘P3’,‘J1’,400);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S2’,‘P3’,‘J2’,200);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S2’,‘P3’,‘J4’,500);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S2’,‘P3’,‘J5’,400);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S2’,‘P5’,‘J1’,400);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S2’,‘P5’,‘J2’,100);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S3’,‘P1’,‘J1’,200);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S3’,‘P3’,‘J1’,200);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S4’,‘P5’,‘J1’,100);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S4’,‘P6’,‘J3’,300);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S4’,‘P6’,‘J4’,200);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S5’,‘P2’,‘J4’,100);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S5’,‘P3’,‘J1’,200);

insert into SPJ(Sno,Pno,Jno,Qty)values(‘S5’,‘P6’,‘J2’,200);

insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S5’,‘P6’,‘J4’,500);

–查询SPJ表中的所有数据
select *
from SPJ;

三、设计相关实验用例数据
1、针对下列情况,如果出错的话,给出错误码,并说明原因;
不出错的话,观察数据并说明理由。

(1)插入违反约束的元组,主码为null值
insert
into S(Sno,Sname,City)
values(null,‘张三’,‘湖北’);

(2)插入违反约束的元组,主码取重复值
insert
into S(Sno,Sname,City)
values(‘S1’,‘张三’,‘湖北’);

(3)插入违反约束的元组,用户定义完整性(pname非空)
insert
into P(Pno,Pname,Color)
values(‘P7’,null,‘红’);

(4)插入违反约束的元组,用户定义完整性(color只能取红、蓝、绿)
insert
into P(Pno,Pname,Color)
values(‘P8’,‘螺丝刀’,‘黑’);

(5)插入违反约束的元组,外码取null值
insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S1’,null,‘J1’,200);

(6)插入违反约束的元组,外码取对应主码没有的值
insert
into SPJ(Sno,Pno,Jno,Qty)
values(‘S1’,‘P9’,‘J3’,100);

(7)修改外码值,取对应主码已有的值
update SPJ
set Pno=‘P2’
where Sno=‘S1’ and Pno=‘P1’ and Jno=‘J3’;

select *
from SPJ;

(8)修改外码值,取对应主码没有的值
update SPJ
set Sno=‘S9’
where Sno=‘S1’ and Pno=‘P1’ and Jno=‘J3’;

(9)删除被参照表未引用的主码值
delete
from P
where Pno=‘P4’;

(10)删除被参照表(已被)引用的主码值
delete
from P
where Pno=‘P6’;

(11)修改被参照表未(被)引用的主码值
update P
set Pno=‘P4’
where Pno=‘P8’;

select *
from P;

(12)修改被参照表引用的主码值
update P
set Pno=‘P9’
where Pno=‘P6’;

2、将外码改成级联删除。
–删除SPJ的定义
drop table SPJ;

create table SPJ
(
Sno char(2),
Pno char(2),
Jno char(2),
Qty int constraint C1 check(Qty between 0 and 1000),
constraint SPJKey primary key(Sno,Pno,Jno),
constraint FK_Sno foreign key(Sno) references S(Sno) on delete cascade,
constraint FK_Pno foreign key(Pno) references P(Pno) on delete cascade,
constraint FK_Jno foreign key(Jno) references J(Jno) on delete cascade
);

select * from SPJ;
3、在2的基础上,插入数据。针对下列情况,如果出错的话,给出错误码,并说明原因;
不出错的话,观察数据并说明理由。
(1)删除被参照表未(被)引用的主码值
delete
from P
where Pno=‘P4’;

select *
from P;

(2)删除被参照表引用的主码值
delete
from P
where Pno=‘P6’;

(3)修改被参照表未(被)引用的主码值
update P
set Pno=‘P4’
where Pno=‘P8’;

select *
from P;

(4)修改被参照表引用的主码值
update P
set Pno=‘P9’
where Pno=‘P6’;

select *
from P;

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值