create table S
(
Sno char(2),
Sname varchar2(10),
City char(6) default null,
primary key(Sno)
);
create table P
(
Pno char(2),
Pname varchar2(12) not null,
Color char(3) check(Color in('红','蓝','绿')),
primary key(Pno)
);
create table J
(
Jno char(2),
Jname varchar2(15) not null,
primary key(Jno)
);
create table SPJ
(
Sno char(2),
Pno char(2),
Jno char(2),
Qty int check(Qty between 0 and 1000),
primary key(Sno,Pno,Jno),
foreign key(Sno) references S(Sno),
foreign key(Pno) references P(Pno),
foreign key(Jno) references J(Jno)
);
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
);
drop table S;
drop table P;
drop table J;
drop table SPJ;
二、插入数据
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','为民','上海');
select *
from S;
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','齿轮','红');
select *
from P;
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','半导体厂');
select *
from J;
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);
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';
(8)修改外码值,取对应主码没有的值
update SPJ
set Sno='P9'
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='P8'
where Pno='P4';
(12)修改被参照表引用的主码值
update P
set Pno='P9'
where Pno='P6';
2、将外码改成级联删除。
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';
select *
from SPJ;
插入的数据
('S1','竟仪',20,'天津')
('S2','盛锡',10,'北京')
('S3','东方红',30,'北京')
('S4','丰泰盛',20,'天津')
('S5','为民',30,'上海')
('P1','螺母','红',12)
('P2','螺栓','绿',17)
('P3','螺丝刀','蓝',14)
('P4','螺丝刀','红',14)
('P5','凸轮','蓝',40)
('P6','齿轮','红',30)
('J1','三建','北京')
('J2','一汽','长春')
('J3','弹簧厂','天津')
('J4','造船厂','天津')
('J5','机车厂','唐山')
('J6','无线电厂','常州')
('J7','半导体厂','南京')
('S1','P1','J1',200)
('S1','P1','J3',100)
('S1','P1','J4',700)
('S1','P2','J2',100)
('S2','P3','J1',400)
('S2','P3','J2',200)
('S2','P3','J4',500)
('S2','P3','J5',400)
('S2','P5','J1',400)
('S2','P5','J2',100)
('S3','P1','J1',200)
('S3','P3','J1',200)
('S4','P5','J1',100)
('S4','P6','J3',300)
('S4','P6','J4',200)
('S5','P2','J4',100)
('S5','P3','J1',200)
('S5','P6','J2',200)
('S5','P6','J4',500)