数据库系统SSD7 实验4 《存储过程》(MySQL)

数据库系统SSD7 实验4 《存储过程》(MySQL)

一、实验目的

理解存储过程的概念、建立和调用方法。进一步熟悉SQL语句对数据库进行完整性控制的方法。

二、实验内容

1、利用存储过程查找自己的学号、选修课程及成绩。

2、利用存储过程查找姓“李”并且性别为“M”的学生学号、选修课程。

3、利用存储过程计算某同学(学号作为存储过程的参数)所选课程的平均分。

三、实验方法与实验步骤

1、设计查找自己的学号、选修课程及成绩的存储过程,以自己的学号作为参数,调用存储过程。

2、设计存储过程查找姓“李”并且性别为“M”的学生学号、选修课程并调用。

3、设计存储过程计算某同学(学号作为存储过程的参数)所选课程的平均分并调用。

大部分情况根据实验要求写出相应的SQL语句,新建查询并运行、调试即可。创建存储过程可以使用mysql的控制台应用创建,也可以使用Navicat的函数模块进行创建(创建的类型选择“过程”),可以在查询中使用sql语句调用执行存储过程。

四、实验结果

以下为相应的SQL语句。

1、设计查找自己的学号、选修课程及成绩的存储过程,以自己的学号作为参数,调用存储过程。
mysql数据库设计存储过程exp4-1如下:

DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `exp4-1`(IN `stu_no` varchar(20))
BEGIN
	SELECT sc.Sno, sc.Cno, sc.grade FROM sc WHERE sc.Sno=stu_no;
END
//
DELIMITER ;

调用该存储过程:

SET @stu_no='1234567893';
CALL `exp4-1`(@stu_no);

结果:


2、设计存储过程查找姓“李”并且性别为“M”的学生学号、选修课程并调用。
mysql数据库设计存储过程exp4-2如下:

DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `exp4-2`()
BEGIN
	SET @s_name='李%';
	SET @s_sex='M';
	SELECT sc.Sno, s.Sname, sc.Cno FROM sc, s 
	WHERE sc.Sno=s.Sno 
		AND s.Ssex=@s_sex 
		AND s.Sname LIKE @s_name;
END 
//
DELIMITER ;

调用:

CALL `exp4-2`()

结果:


3、设计存储过程计算某同学(学号作为存储过程的参数)所选课程的平均分并调用。
mysql数据库设计存储过程exp4-3如下:

DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `exp4-3`(IN `stu_no` varchar(20))
BEGIN
	SELECT Sno, Avg_grade FROM v_avg_s_g WHERE Sno=stu_no;
END 
//
DELIMITER ;

调用:

SET @stu_no='1234567893';
CALL `exp4-3`(@stu_no);

结果:


五、实验小结

主要学习了使用create procedure语句创建存储过程,以及创建过程当中的一些需要注意的基本语法。MySQL和SQL Server的语法很相似,但是不太一样。比如在变量这方面,定义一个局部变量时变量名不一定必须包含@符号,但是定义一个用户变量的时候必须加上@符号,并且用户变量无需使用declare关键字事先声明;在创建存储过程时也没有AS、WITH等等关键字,调用时使用的是CALL关键字。

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

存储过程的好处:

1、由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。

2、一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。

3、通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值