一、实验目的
1.掌握Management Studio的使用。
2.掌握SQL中INSERT、UPDATE、DELETE命令的使用。
二、实验内容及要求
用SQL语句完成下列功能。使用数据库为SCHOOL数据库。
l、新开设一门课程,名叫网络安全与防火墙,学时40,编号为“0118”,主要介绍网络的安全与主要的防火墙软件。
insert into Course(Course_id,Course_name,Course_hour,Introduce)
values ('0118','网络安全与防火墙',40,'主要介绍网络的安全与主要的防火墙软件')
2、先建立monitor表,其结构与student表大致一样.包含student表的学号、姓名、性别和班级编号,然后把学生相应的个人资料插入到monitor表中。
CREATE TABLE monitor(
Stu_id varchar(10) NOT NULL,
Stu_name varchar(8) NOT NULL,
Stu_sex varchar(2) NOT NULL,
Class_id varchar(4) NOT NULL)
insert monitor(Stu_id,Stu_name,Stu_sex,Class_id)
select Stu_id,Stu_name, Stu_sex, Class_id
from Student;
3、更新所有职称为“助教”的教师职称为“助理教师”。
update Teacher
set TechPost ='助理教师'
where TechPost='助教'
4、在所有经济系班级的名称前加上“经济系”三个字。
update Class
set Class_name='经济系'+Class_name
where Depar_id in (select Depar_id from Deparment where Depar_name='经济系')
明明使用的是in语句,却报错子查询的值不止一个
消息 512,级别 16,状态 1,过程 T_3,行 5 [批起始行 0]
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。
完成时间: 2022-04-05T10:42:31.6380603+08:00
改正:禁用class的表的触发器
5、学号为“980101005”的学生的“数据结构”课程成绩改为80分。
update StudentGrade
set Grade=80
where Stu_id=980101005
and Course_id in (select Course_id from Course where Course_name='数据结构')
6、删除studentgrade表中所有成绩不及格的记录。
delete from StudentGrade
where Grade<60
7、删除studentgrade表中学号以“99”开头的学生选修课程的记录。
delete from StudentGrade
where Stu_id like'99%'
8、删除课程名为“C语言导论”的课程信息和所有这门课的选课信息。(尽量不用级联删除,因级联需在创建表时定义。)
delete from Course where Course_name='C语言导论'
delete from StudentGrade
where Course_id in(select Course_id from Course where Course_name='C语言导论')
此语句可以执行,但0行受影响,因为表中没有课程名为C语言导论的课程,将课程名改为C语言,报错如下
消息 547,级别 16,状态 0,第 1 行
DELETE 语句与 REFERENCE 约束"FK_StudentGrade_Course"冲突。该冲突发生于数据库"school",表"dbo.StudentGrade", column 'Course_id'。
语句已终止。
(20 行受影响)
完成时间: 2022-04-05T11:11:05.7726363+08:00
使用from语句拓展delete的使用,即可删除
delete StudentGrade from Course
where Course.Course_name='C语言'and StudentGrade.Course_id=Course.Course_id
三、实验小结
1.思考Alter与Update,Drop与Delete的区别
alter用于修改表的列名,约束及数据类型等 update用于修改表中的数据
drop用于删除表,模式等 delete用于删除表中的数据
2.对数据进行插入、修改、删除时需要注意哪些问题?
使用insert插入多个元组时不能再使用values,要使用子查询及union;使用insert导入其他表数据时也需使用子查询
DBMS在执行插入语句时会检查所插元组是否破坏表上
已定义的完整性规则
使用update修改表中数据时要注意是否破坏了约束
3.此次实验中得到的哪些经验教训、疑难问题?有什么心得或总结?