数据库系统实验6:存储过程详解

需积分: 0 0 下载量 44 浏览量 更新于2024-08-05 收藏 84KB PDF 举报
"数据库系统实验61 - 存储过程实验" 在本次实验中,主要涉及了MySQL数据库中的存储过程这一重要概念。存储过程是一种预编译的SQL语句集合,可以封装一系列复杂的操作,提高代码复用性和执行效率。实验内容分为三个部分:无参数的存储过程、有参数的存储过程以及有局部变量的存储过程,主要用于根据选课记录更新学生的绩点。 1.1 无参数的存储过程 这部分实验中,定义了一个名为`Proc_CalCred`的存储过程,用于批量更新所有学生的绩点。首先,通过设置`SQL_SAFE_UPDATES`为0,允许对数据进行批量修改。接着,使用`UPDATE`语句结合`SELECT`子查询,从`student`表中选取每个学生的ID,并通过`TAKES`和`COURSE`表的自然连接,获取所有不为空且非“F”等级的课程学分之和,更新到学生的总学分字段`tot_cred`。最后,恢复`SQL_SAFE_UPDATES`为默认值1,确保后续操作的安全性。存储过程创建完毕后,通过`CALL`命令执行。 1.2 有参数的存储过程 在此阶段,创建了一个名为`Proc_CalCred4Student`的存储过程,该过程接受一个参数`stu`,即学生的学号。此过程只更新指定学号的学生的绩点。与无参数存储过程类似,它首先获取该学生所有不为空且非“F”等级的课程学分之和,然后更新该学生的`tot_cred`字段。调用存储过程时,传入学生的学号作为参数。 1.3 有局部变量的存储过程 这个部分的存储过程`Proc_CalCred4Student_2`接收一个参数`stu_name`,即学生姓名,但考虑到姓名可能存在重复,所以使用了局部变量`id_key`来存储查询结果。首先声明`id_key`为一个长度为5的VARCHAR类型变量,接着通过`SELECT`语句查询具有给定姓名的学生ID并将其赋值给`id_key`。然后,使用`WHERE`子句根据`id_key`更新相应学生的`tot_cred`字段。这样,即使姓名重复,也能确保正确更新对应的学生。 总结来说,实验61主要介绍了如何利用MySQL创建和执行存储过程,包括无参数、带参数和使用局部变量的场景,这些技巧在实际数据库管理中非常实用,可以提高数据库操作的效率和安全性。通过这三个存储过程,我们可以看到如何灵活运用SQL语句和参数,实现特定的数据处理逻辑。