排版设计模板,安新seo优化排名网站,馆陶网站建设公司,在线logo设计网站存储过程、函数与触发器 第1关#xff1a;创建存储过程任务描述相关知识存储过程的定义存储过程的创建和查询存储过程的查询和删除 编程要求测试说明参考代码 第2关#xff1a;创建函数-count_credit任务描述相关知识自定义函数的定义自定义函数的创建 编程要求测试说明参考代… 存储过程、函数与触发器 第1关创建存储过程任务描述相关知识存储过程的定义存储过程的创建和查询存储过程的查询和删除 编程要求测试说明参考代码 第2关创建函数-count_credit任务描述相关知识自定义函数的定义自定义函数的创建 编程要求测试说明参考代码 第3关存储过程-调用函数count_credit任务描述相关知识存储过程的定义 编程要求测试说明参考代码 第4关创建触发器-计算总学分任务描述 相关知识触发器的定义触发器的创建after触发器 编程要求测试说明代码参考 第5关创建触发器-练习级联删除操作任务描述相关知识编程要求测试说明代码参考 第1关创建存储过程
任务描述
本关任务创建存储过程 pro_findname 对学生姓名进行模糊查找,输入任一字输出姓名中含有该字的全部学生。
相关知识
为了完成本关任务你需要掌握 1.存储过程的定义 2.存储过程的创建和查询 3.存储过程的查询和删除。
存储过程的定义
存储过程Stored Procedure是一种在数据库中存储复杂程序以便外部程序调用的一种数据库对象。
简单的说存储过程就是具有名字的一段代码用来完成一个特定的功能。
存储过程的创建和查询
创建存储过程create procedure 存储过程名(参数)
下面我们来创建第一个存储过程 每个存储的程序都包含一个由 SQL 语句组成的主体。此语句可能是由以分号;字符分隔的多个语句组成的复合语句。例如
CREATE PROCEDURE proc1()
BEGIN
SELECT * FROM user;
END;执行存储过程call 存储过程名 创建带有参数的存储过程 存储过程的参数有三种 IN输入参数也是默认模式表示该参数的值必须在调用存储过程时指定在存储过程中修改该参数的值不能被返回OUT输出参数该值可在存储过程内部被改变并可返回INOUT输入输出参数调用时指定并且可被改变和返回。
存储过程的查询和删除
我们如何在数据库中查询我们已经创建过的存储过程呢
SHOW PROCEDURE STATUS WHERE db数据库名;查看存储过程的详细定义信息
SHOW CREATE PROCEDURE 数据库.存储过程名;当我们不再需要某个存储过程时我们可以使用
DROP PROCEDURE [IF EXISTS] 数据库名.存储过程名;编程要求
根据提示在右侧编辑器补充代码创建存储过程pro_findname 对学生姓名进行模糊查找,输入任一字输出姓名中含有该字的全部学生。
测试说明
平台会对你编写的代码进行测试将调用你编写的存储过程:call pro_findname(‘明’)具体输出请参考右侧测试集。 开始你的任务吧祝你成功
参考代码 use teachingdb;/****请在此编写代码操作完毕之后点击评测******//**********Begin**********/delimiter ^create procedure pro_findname(in p_name char(3))Beginselect *from student where sname like concat(%,p_name,%);End^delimiter ;/**********End**********/第2关创建函数-count_credit
任务描述
本关任务设计函数 count_credit根据学号计算该学生的总学分只有当成绩大于等于60分时才能获得该门课程的学分。
相关知识
为了完成本关任务你需要掌握
mysql 自定义函数的定义自定义函数如何创建。
自定义函数的定义
自定义函数是一种过程式数据库对象与存储过程十分相似的。是由 SQL 语句和过程式语句组成的代码片段。
自定义函数的创建
语法如下
CREATE FUNCTION 函数名 ( [ 参数1 类型1 [ , 参数2 类型2] ] … ) RETURNS 类型 函数主体编程要求
根据提示在右侧编辑器补充代码设计函数 count_credit根据学号计算该学生的总学分只有当成绩大于等于60分时才能获得该门课程的学分。
测试说明
平台会对你编写的代码进行测试本题中该学生选“马蓉”学号为“97001”) 开始你的任务吧祝你成功
参考代码 use teachingdb;/****请在此编写代码操作完毕之后点击评测******/delimiter $$drop function if exists count_credit$$CREATE FUNCTION count_credit(stuno char(6)) returns intreads sql dataBegindeclare stucno char(3) ;declare cred int default 0;declare t_cred int default 0;declare done int default false;declare stucur cursor for select cno from score where snostuno and grade60;declare continue handler for not found set donetrue;open stucur;loop_cursor:loopfetch stucur into stucno;if done then leave loop_cursor; End if;select credit into cred from course where cnostucno;set t_credt_credcred;end loop;return t_cred;end$$delimiter ;第3关存储过程-调用函数count_credit
任务描述
本关任务创建存储过程 p_count_credit调用 count_credit 函数更新学生表的总学分值。
相关知识
为了完成本关任务你需要掌握 1.存储过程的定义 2.存储过程的创建和查询 3.存储过程的查询和删除。
存储过程的定义
存储过程Stored Procedure是一种在数据库中存储复杂程序以便外部程序调用的一种数据库对象。
存储过程是为了完成特定功能的 SQL 语句集经编译创建并保存在数据库中用户可通过指定存储过程的名字并给定参数需要时来调用执行。
存储过程思想上很简单就是数据库 SQL 语言层面的代码封装与重用。
简单的说存储过程就是具有名字的一段代码用来完成一个特定的功能。
编程要求
根据提示在右侧编辑器补充代码创建存储过程 p_count_credit调用count_credit 函数更新学生表的总学分值。
测试说明
平台会对你编写的代码进行测试将调用你编写的存储过程p_count_credit函数的count_credit的功能和第2关中的相同具体输出请参考右侧测试集。 开始你的任务吧祝你成功
参考代码 use teachingdb;/****请在此编写代码操作完毕之后点击评测******//**********Begin**********/delimiter $create procedure p_count_credit()Begindeclare flag int default 1;declare psno char(5);declare stucur cursor for select sno from student;declare continue handler for not found set flag0;open stucur;while flag1 do fetch stucur into psno;update student set totalcreditcount_credit(psno) where snopsno;end while;close stucur;end $delimiter ;/**********End**********/第4关创建触发器-计算总学分
任务描述
本关任务创建触发器 sum_credit实现对 student 表总学分的计算当 score 中添加记录时student 表总学分的值做相应改变。当课程成绩大于等于60分时将该课程的学分加到该学生的总学分中。
相关知识
为了完成本关任务你需要掌握 1.触发器的定义 2.触发器的创建 3.after 触发器。
触发器的定义
触发器Trigger是存储在系统内部的一段程序代码。
触发器和存储过程类似可以把它看作是一个特殊的存储过程。两者的区别是触发器无需人工调用当程序满足定义条件时就会被 MySQL 自动调用。这些条件可以称为触发事件包括 INSERT、UPDATE 和 DELETE 操作。
核心就是数据库 SQL 语言层面的代码封装与重用。
触发器的创建
下面我们来创建一个触发器
CREATE TRIGGER trigger_name trigger_time trigger_eventON table_name FOR EACH ROW trigger_bodytrigger_time触发器触发时机有before和aftertrigger_event触发器触发事件有insert,update,delete三种trigger_body触发器主体语句after触发器
delete触发器 建一个触发器 t_d_s当删除表 student 中某个学生的信息时同时将 grade 表中与该学生有关的数据全部删除。
CREATE TRIGGER trigger_t1
AFTER DELETE ON student
FOR EACH ROW
BEGIN DELETE FROM grade WHERE studentid old.studentid;
ENDUPDATE 创建一触发器 t_u_s实现在更新学生表的学号时同时更新 grade 表中的相关记录的 student 的 id 值。
CREATE TRIGGER t_u_s
AFTER UPDATE ON student
for EACH ROW
BEGINUPDATE grade SET studentid new.studentid WHERE studentid old.studentid;
ENDINSERT 创建一个存储过程根据 student 表中数据一次性更新 class 表中每个班的人数
CREATE PROCEDURE p_tao()
BEGINDECLARE num int;DECLARE cid VARCHAR(20);DECLARE done boolean DEFAULT true;DECLARE cur CURSOR FORSELECT classid,COUNT(*)FROM studentGROUP BY classid; DECLARE CONTINUE HANDLER FOR NOT found SET done false;UPDATE class set studentnum 0;OPEN cur;FETCH cur INTO cid,num;WHILE done DO UPDATE class SET StudentNum num WHERE classid cid; FETCH cur INTO cid,num; END WHILE;CLOSE cur;
END
CALL p_tao();编程要求
根据提示在右侧编辑器补充代码创建触发器 sum_credit实现对 student 表总学分的计算当 score 中添加记录时student 表总学分的值做相应改变。当课程成绩大于等于60分时将该课程的学分加到该学生的总学分中。
测试说明
平台会对你编写的代码进行测试平台会用“马小燕”为测试用例进行测试。 开始你的任务吧祝你成功
代码参考 use teachingdb;/****请在此编写代码操作完毕之后点击评测******//**********Begin**********/delimiter $create trigger sum_credit before insert on score for each rowBeginupdate student set totalcredit totalcredit(select credit from course where cnonew.cno)where student.snonew.sno and new.grade60;End$delimiter ;/**********End**********/第5关创建触发器-练习级联删除操作
任务描述
本关任务创建级联删除触发器 del_student_score当删除 student 表中的学生时也删除 score 表中的对应学号的学生成绩记录。
相关知识
见第4关。
编程要求
根据提示在右侧编辑器补充代码创建级联删除触发器 del_student_score当删除 student 表中的学生时也删除 score 表中的对应学号的学生成绩记录。
测试说明
平台会对你编写的代码进行测试。 开始你的任务吧祝你成功
代码参考 use teachingdb;/****请在此编写代码操作完毕之后点击评测******//**********Begin**********/delimiter create trigger del_student_score before delete on student for each rowBegindelete from score where snoold.sno;Enddelimiter ;/**********End**********/