(1)实验目的
插入、删除、修改是数据库中更新数据的基本方法,对数据库进行数据更新操作必须满足数据的完整性要求。通过本次实验,掌握数据库中插入数据、修改数据、删除数据的基本语法,理解和掌握完整性约束条件的作用和使用方法。
(2)实验要求
熟悉实验室实验环境,阅读实验预备知识,掌握本实验内容涉及知识点的基本用法,了解实验中故障排除的基本方法。实验中根据实验步骤进行,根据步骤要求撰写实验报告。
(3)实验环境
Oracle 10g,windows 2003;
(4)实验内容和步骤
熟悉实验室实验环境,阅读实验预备知识,掌握本实验内容涉及知识点的基本用法,了解实验中故障排除的基本方法。实验中根据实验步骤进行,根据步骤要求撰写实验报告。
1.列出Teacher表的所有约束,并说明每个约束的具体含义及其对表列取值的影响;
select table_name,constraint_name,constraint_type from user_constraints where table_name='TEACHER';
TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE
1 TEACHER SYS_C0011483 C
2 TEACHER SYS_C0011484 C
3 TEACHER SYS_C0011485 C
4 TEACHER SYS_C0011486 C
5 TEACHER PK_TEACHER P
6 TEACHER FK_TEACHER_BELONGTO_DEPARTME R
C约束是指Check on a table 具体为列约束,可以设置触发器
P约束是指Primary Key 具体为主码约束(要求非空且唯一)
R约束是指Refrential AKA Foreign Key具体为外码约束
2.书写SQL语句,在Teacher表中插入2条元组,元组内容任意设置,要求能取空值的列均设置为空(提示:如果插入失败,则查看是否满足基本表的约束条件);
insert into teacher(tno, tname, tsex, tsalary, tbirthday, dno) values('t009', '李华', '男', 8000, To_date('22-12月-1988', 'DD-mon-yyyy'), 'd001');
insert into teacher(tno, tname, tsex, tsalary, tbirthday, dno) values('t010', '克里斯汀娜', '女', 20000, To_date('22-10月-1998', 'DD-mon-yyyy'), 'd002');
3.利用“create table teacher2 as select * from teacher”语句创建表teacher2,并列出Teacher2表的所有约束,比较Teacher2表与Teacher表的约束差异;
create table teacher2 as select * from teacher;
select table_name,constraint_name,constraint_type from user_constraints where table_name='TEACHER';
select table_name,constraint_name,constraint_type from user_constraints where table_name='TEACHER2';
4.任取teacher表中的一条元组,把这条元组分别插入到teacher2和Teacher表中,比较两次插入操作的运行结果并分析原因(要求插入失败时必须指出违反了哪类完整性约束条件);
insert into teacher(tno, tname, tsex, tsalary, tbirthday, dno) values('t008', '李小小', '女', 5687, To_date('17-10-1985', 'DD-mm-yyyy'), 'd001');
--错误,违反了唯一约束条件
insert into teacher2(tno, tname, tsex, tsalary, tbirthday, dno) values('t008', '李小小', '女', 5687, To_date('17-10-1985', 'DD-mm-yyyy'), 'd001');
--成功
5.使用带子查询的插入语句把teacher表中的所有男教师插入到teacher2表中;
insert into teacher2(tno,tname,tsex,tsalary,tbirthday,dno) select tno,tname,tsex,tsalary, tbirthday,dno from teacher where tsex='男';
6.为表Teacher添加check约束,使性别的取值只能为“男”或者“女”;
alter table teacher add check(tsex='男' or tsex='女');
7.删除teacher2表中工资等于6000的教师信息;
delete from teacher2 where tsalary=6000;
8.删除teacher2表中“计算机科学系”的所有教师;
delete from teacher2 where dno in(select dno from department where dname='计算机科学系');
9.删除teacher2表中的所有教师;
delete from teacher2;
10.修改teacher2表,使列tno为主码,主码约束名字为PK_teacher2;
alter table teacher2 add constraint PK_teacher2 primary key(tno) ;
11.为teacher2表添加唯一约束,使tname的取值不能重复;
alter table teacher2 add unique(tname);
12.修改teacher2表,使列dno成为外码,引用department表的主码dno,当删除department表中的元组时,级联删除Teacher2表中的元组(提示:删除并重新创建外码约束,使用ON DELETE CASCADE选项);
alter table teacher2 add foreign key(dno) references department(dno) on delete cascade;
13.在department表中插入一个新系,系号为“xyz”,在Teacher2表中为该新系添加两个教师信息;
insert into department(dno,dname) values('xyz','x');
insert into teacher2(tno, tname, tsex, tsalary, tbirthday, dno) values('t009', '李华', '男', 8000, To_date('22-12月-1988', 'DD-mon-yyyy'), 'xyz');
insert into teacher2(tno, tname, tsex, tsalary, tbirthday, dno) values('t010', '克里斯汀娜', '女', 20000, To_date('22-10月-1998', 'DD-mon-yyyy'), 'xyz');
14.分别写出删除department表中系号为d001和xyz的记录的SQL语句并执行,比较并分析执行结果(提示:在Teacher表和Teacher2表中的外码定义是不同的);
delete department where dno='d001';
--失败,违反完整性约束条件-存在子连接未断开
delete department where dno='xyz';
--成功
15.在tm中插入一条元组,只设置tno、pno的值;
insert into tm(tno,pno) values('t001','p001');
--失败,违反完整性约束条件
16.给teacher表中的所有教师的工资增加100;
update teacher set tsalary=tsalary+100;
17.给teacher表中的“计算机科学系”教师的工资增加100;
update teacher set tsalary=tsalary+100 where dno in(select dno from department where dname='计算机科学系');
18.创建两个视图VT、VT2,两个视图均为包含所有teacher表的男教师的信息,但视图VT2的定义带有with check option选项,设置一条女教师信息记录,指出通过哪个视图可以成功插入记录,并说明with check option选项的作用;
create view VY as select * from teacher where tsex='男';
create view VY2 as select * from teacher where tsex='男' with check option;
insert into VY(tno, tname, tsex, tsalary, tbirthday, dno) values('t011', '嘟噜噜', '女', 20000, To_date('22-10月-1998', 'DD-mon-yyyy'), 'd001');
--成功
insert into VY2(tno, tname, tsex, tsalary, tbirthday, dno) values('t011', '嘟噜噜', '女', 20000, To_date('22-10月-1998', 'DD-mon-yyyy'), 'd001');
--失败
--with check option 的作用是在进行插入操作时会判断是否符合约束条件,不符合拒绝插入。