经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
MySQL数据库实验之?触发器和存储过程
来源:jb51  时间:2022/6/20 16:23:01  对本文有异议

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

一、实验目的

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

二、实验要求

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

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

三、实现内容及步骤

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

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

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

  1. call sp_avggrade();

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

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

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

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

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

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

  1. delimiter//
  2. CREATE PROCEDURE sp_sdept_student2(IN _sdept CHAR(10),OUT num int)
  3. BEGIN
  4. SELECT COUNT(sno) INTO num
  5. FROM student
  6. WHERE _sdept = sdept;
  7. END//
  8. delimiter;

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

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

4、触发器的创建与使用

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

  1. delimiter//
  2. CREATE TRIGGER delete_stu
  3. BEFORE DELETE
  4. ON student
  5. FOR EACH ROW
  6. BEGIN
  7. DELETE
  8. FROM sc
  9. WHERE sc.sno=old.sno;
  10. END//
  11. delimiter;

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

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

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

验证(1)

  1. DELETE
  2. FROM student
  3. WHERE sno='201513';

验证(2)

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

四、实验总结

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号