【SQL】实验八 数据的增删改操作

这篇博客主要介绍了SQL中的数据操作,包括如何新增课程、复制表数据、更新助教职称、调整班级名称、修改成绩、删除记录等。在实验过程中遇到了子查询返回多值的错误和触发器导致的删除冲突问题,通过禁用触发器和使用FROM语句解决了问题。文章总结了ALTER与UPDATE、DROP与DELETE的区别,并强调了在进行数据操作时应注意完整性规则和约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验目的

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导入其他表数据时也需使用子查询

INTO 子句
Ø 指定 要插入数据的 表名及属性列
Ø 属性列的顺序 与表定义中的顺序 不一致
Ø 没有指定属性列 :表示要插入的是一条完整的元组,且属性列与表定义中的顺序一致
Ø 指定部分属性列 :插入的元组在其余属性列上取空值
  VALUES 子句
Ø 提供的 值必须 INTO 子句 匹配
值的个数
值的类型
 

DBMS在执行插入语句时会检查所插元组是否破坏表上

已定义的完整性规则

Ø 实体完整性
Ø 参照完整性
Ø 用户定义的完整性 
对于 NOT NULL 约束的属性列是否提供了非空值
 对于 UNIQUE 约束的属性列是否提供了非重复
 对于值域约束的属性列所提供的属性值是否在值域范围内

 

 

使用update修改表中数据时要注意是否破坏了约束

3.此次实验中得到的哪些经验教训、疑难问题?有什么心得或总结?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老坛酸菜吃鸭子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值