MySQL数据库实验之 触发器和存储过程

 更新时间:2022年06月20日 14:35:53   作者:Code_流苏  
这篇文章主要介绍了MySQL数据库实验之 触发器和存储过程,通过掌握某主流DBMS支持的SQL编程语言和编程规范,规范设计存储过程展开详细介绍,感兴趣的朋友可以参考一下

观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合每个人实验的要求的地方,因此以下内容建议仅做思路参考。

一、实验目的

  • 1、掌握某主流DBMS支持的SQL编程语言和编程规范,规范设计存储过程;
  • 2、能够理解不同类型触发器的作用和执行原理,验证触发器的有效性;
  • 3、培养学生的系统思维,提升解决复杂工程问题所需的编程能力。

二、实验要求

掌握某主流DBMS的SQL编程语言,在前面创建的数据库基础上,定义BEFORE(for)触发器和AFTER触发器;掌握数据库存储过程定义、存储过程运行,存储过程更名,存储过程删除,存储过程的参数传递。

温馨提示:以下内容均已经过测试,不过难免会有疏漏,但是代码实现大多数思路及实现经测验都是正确的。

三、实现内容及步骤

1、创建一个不带参数的简单存储过程

  • (1)创建存储过程sp_avggrade,实现查询每门课程学生的平均成绩的功能;
delimiter//
CREATE PROCEDURE sp_avggrade()
COMMENT '查询每门课程学生的平均成绩的功能'
BEGIN
SELECT cno as 课程号,avg(grade)as 平均成绩
FROM sc
GROUP BY cno;
end//
delimiter;

(2)调用该存储过程,实现查询。

call sp_avggrade();

2、创建一个带输入参数的存储过程

(1)创建存储过程sp_course_avggrade, 实现通过输入课程编号参数查询指定课程编号的课程平均成绩的功能;

delimiter//
CREATE PROCEDURE sp_course_avggrade(IN c_no CHAR(2))
COMMENT '通过输入课程编号参数查询指定课程编号的课程平均成绩的功能'
BEGIN
SELECT cno,AVG(grade)
FROM sc
WHERE cno=c_no;
END//
delimiter;

(2)调用该存储过程,获取指定课程的平均成绩。

3、创建一个带输入输出参数的存储过程

(1)创建存储过程sp_sdept _student,实现根据用户输入的院系编号参数,查找该学院的学生人数,并以变量形式输出的功能;

delimiter//
CREATE PROCEDURE sp_sdept_student2(IN _sdept CHAR(10),OUT num int)
BEGIN
SELECT COUNT(sno) INTO num
FROM student
WHERE _sdept = sdept;
END//
delimiter;

(2)调用该存储过程,以返回变量的形式获取相应院系的学生人数。

SET @num=10;
CALL sp_sdept_student2('计科',@num);
SELECT @num AS '人数';

4、触发器的创建与使用

(1)在学生表上创建触发器,实现学生表中删除学生记录时,成绩表中该学生成绩记录的级联删除;

delimiter//
CREATE TRIGGER delete_stu
BEFORE DELETE
ON student
FOR EACH ROW
BEGIN
DELETE
FROM sc
WHERE sc.sno=old.sno;
END//
delimiter;

(2)在选课表上创建触发器,若录入的成绩大于100分,小于0分,则拒绝插入记录并显示;

delimiter//
CREATE TRIGGER scgrade
BEFORE INSERT ON sc
FOR EACH ROW
BEGIN
IF new.grade>100 or new.grade < 0 THEN
SIGNAL SQLSTATE '45000'
SET message_text='录入成绩不符合规定,拒绝插入';
END IF;
END//
delimiter;

(3)验证(1)、(2)中触发器

验证(1)

DELETE
FROM student
WHERE sno='201513';

验证(2)

INSERT INTO sc(sno,cno,grade)
VALUES('2002720','1',200);

四、实验总结

  • 1、通过本次实验,对存储过程和触发器有了更深的认识;
  • 2、能够理解不同类型触发器的作用和执行原理, 验证了触发器的有效性;
  • 3、熟练掌握了数据库存储过程定义、存储过程运行,存储过程更名,存储过程删除,存储过程的参数传递。

到此这篇关于MySQL数据库实验之 触发器和存储过程的文章就介绍到这了,更多相关MySQ存储过程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql忘记密码重置的方法实现

    mysql忘记密码重置的方法实现

    本文主要介绍了mysql忘记密码重置的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 一台电脑(windows系统)安装两个版本MYSQL方法步骤

    一台电脑(windows系统)安装两个版本MYSQL方法步骤

    由于新旧项目数据库版本差距太大,编码格式不同,引擎也不同,所以只好装两个数据库,这篇文章主要给大家介绍了关于一台电脑(windows系统)安装两个版本MYSQL的方法步骤,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • MySQL数据库常用命令小结

    MySQL数据库常用命令小结

    这篇文章主要介绍了MySQL数据库命令,主要包括对数据库常用命令及数据库中对表的命令,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • MySQL报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre

    MySQL报错Expression #1 of SELECT list 

    这篇文章主要介绍了MySQL报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • Mysql子查询IN中使用LIMIT应用示例

    Mysql子查询IN中使用LIMIT应用示例

    有3张表,infor信息表,mconfig物料配置表,maaply物料申请表,要求是读出申请表中哪些人申请哪些物料,接下来为大家介绍下Mysql子查询IN中使用LIMIT
    2014-01-01
  • 通过ibd文件恢复MySql数据的操作方法

    通过ibd文件恢复MySql数据的操作方法

    文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并重启MySQL,对于不知道表结构的情况,可以使用ibd2sql工具生成对应的SQL脚本,然后执行该脚本恢复数据,感兴趣的朋友看看吧
    2025-03-03
  • MySQL查询优化:用子查询代替非主键连接查询实例介绍

    MySQL查询优化:用子查询代替非主键连接查询实例介绍

    对多的两张表,一般是一张表的外键关联到另一个表的主键,接下来为大家介绍下用子查询代替非主键连接查询,感兴趣的朋友可以参考下哈,希望对你有所帮助
    2013-04-04
  • MySQL中删除重复数据SQL的三种写法

    MySQL中删除重复数据SQL的三种写法

    这篇文章主要介绍了MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2025-01-01
  • MybatisPlus拦截器如何实现数据表分表

    MybatisPlus拦截器如何实现数据表分表

    为了解决MySQL中大数据量的查询效率问题,采用水平拆分策略,通过取模运算确定表后缀,实现数据的有效管理,设计分表时,需利用线程变量存取请求参数,并通过拦截器确定操作的具体表名,从而优化数据处理性能,此方法适用于业务表数据量大或快速增长的场景
    2024-11-11
  • mysql中varchar和text的区别和比较

    mysql中varchar和text的区别和比较

    在存储字符串时可以使用char、varchar或者text类型,下面这篇文章主要给大家介绍了关于mysql中varchar和text的区别和比较的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10

最新评论