<table>
<tbody>
<tr>
<td width = 140px align = center><b>课题<br>名称</b></td>
<td >第6章 事务与存储过程</td>
<td> <div style = "vertical-align:top;text-align:center">计划<br>学时</div></td>
<td ><div style = "vertical-align:top;text-align:center">8 课时</div></td>
</tr>
<tr>
<td width = 140px align = center><b>内容<br>分析</b></td>
<td colspan=3> 在数据库开发过程中,经常会为了完成某一功能而编写一组SQL语句。为了确保每一组SQL语句所做操作的完整性和重用性,MySQL中引入了事务和存储过程,本章将针对事务与存储过程进行详细地讲解。</td>
</tr>
<tr>
<td width = 140px align = center ><b>教学目标<br>基本要求</b></td>
<td colspan = 3>
1、了解事务的概念,会开启、提交和回滚事务<br>
2、掌握事务的四种隔离级别<br>
3、学会创建存储过程<br>
4、掌握调用、查看、修改和删除存储过程
</td>
</tr>
<tr>
<td width = 140px align = center><b>教学重点</b></td>
<td colspan = 3>
1、事务的开启、提交和回滚<br>
2、事务的四种隔离级别<br>
3、存储过程的创建和使用
</td>
</tr>
<tr>
<td width = 140px align = center><b>难点及措施</b></td>
<td colspan = 3>
1、事务的隔离级别<br>
2、变量的使用<br>
3、定义条件和处理程序<br>
4、光标的使用<br>
5、流程控制的使用
</td>
<tr>
<td width = 140px align = center><b>教学方式</b></td>
<td colspan = 3>
讲师课堂教学要以PPT讲授为主,并结合多媒体进行教学
</td>
</tr>
<tr>
<td width = 140px align = center><b>教学过程</b></td>
<td colspan = 3>
<div style = "vertical-align:top;text-align:center"><h4><b>第一课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(事务管理)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、创设情境,导入事务的概念</b></h5></div>
<div style= color:black>(1)教师提出需求,引出事务</div>
<div style = color:blue> 在现实生活中,我们经常会进行转账操作,转账可以分为两部分来完成,转入和转出,只有这两个部分都完成才认为转账成功,在数据库中,这个过程是使用两条语句来完成的,如果其中任意一条语句出现异常没有执行,则会导致两个账户的金额不同步,造成错误。如何防止上述情况的发生呢?为此MySQL中引入了事务,它可以使整个系统更加安全,保证在同一个事务中的操作具有同步性。</div>
<div style= color:black>(2)明确学习目标</div>
<div style = color:blue> 1、要求学生了解什么事务以及事务的四个特性</div>
<div style = color:blue> 2、要求学生掌握如何开启、提交和回滚事务。</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进行重点知识的讲解</b></h5></div>
<div style= color:black>(1)什么是事务?</div>
<div style = color:blue> 教师讲解事务的概念,所谓的事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,同一个事务的操作具备同步的特点,如果其中<br>
教师讲解事务管理中涉及到的事务开启、提交和回滚操作,给出各自的SQL语句并解释。为了简单演示事务的三个操作,教师首先创建一个名为chapter06的数据库,在库中建立account表并插入相应数据,接着通过一个具体的案例演示先开启一个事务,再通过UPDATE语句将a账户的100元钱转给b账户,最后提交事务(可参见教材例6-1)。在讲解完成之后,教师让学生默写出事务开启、提交和回滚操作的SQL。<br>
教师讲解事务的四个特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),并分别解释各个特性的含义。
</div>
<div style= color:black>(2)如何提交事务?</div>
<div style = color:blue> 教师讲解提交事务相当于是事务中的用户确认操作,当用户确认提交后,事务中的操作才会执行成功,这个过程是手动提交的过程。为了说明事务的提交方式为手动提交,通过一个具体的案例来演示开启事务不提交退出、开启事务提交两种情况,并比较两种情况的执行结果。</div>
<div style=color:black>(3)如何回滚事务?</div>
<div style = color:blue> 教师首先讲解为什么要回滚事务,例如在操作一个事务时,如果发现当前事务中的操作是不合理的,此时只要还没有提交事务,就可以通过回滚来取消当前事务。然后通过一个具体的案例演示事务的回滚操作,开启一个事务,通过update语句将a账户的100元钱转给b账户,但是不提交,而是执行ROLLBACK语句将事务回滚,查看回滚操作后的结果。</div>
<div style = color:blue> </div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,随堂练习,布置作业</b></h5></div>
<div style=color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style=color:black>(2)使用测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第二课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(事务的隔离级别)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、回顾上节课内容,继续讲解事务的隔离级别</b></h5></div>
<div style = color:black>(1)对上节课留的作业进行答疑。</div>
<div style = color:black>(2)回顾总结上节课的内容,引出本节课主题 </div>
<div style = color:blue> 上节课讲解了事务的概念以及事务的开启、提交和回滚操作。本节课将讲解事务的隔离级别,在MySQL中,事务有四种隔离级别,分别是READ UNCOMMITTED(读未提交)、READ COMMITTED(读提交)、REPEATABLE READ(可重复读)、SERIALIZABLE(可串行化)。</div>
<div style = color:black>(3)明确学习目标</div>
<div style = color:blue>
要求学生知道事务有哪4种隔离级别,掌握这4种隔离级别各自的特点,了解脏读、幻读、不可重复读等问题的产生。
</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进入重点知识点的讲解</b></h5></div>
<div style = color:black>(1)脏读</div>
<div style = color:blue> 教师讲解什么是脏读,所谓脏读就是指一个事务读取了另外一个事务未提交的数据。<br>
教师通过一个具体的案例演示脏读问题的发生。首先开启两个命令行窗口分别模拟a账户和b账户,然后将B账户中事务的隔离级别设置为READ UNCOMMITTED(读未提交),在事务中进行转账操作并提交,最后查看是否出现脏读。作为比较,再将B账户中事务的隔离级别设置为read commited(读提交),然后在事务中进行转账操作并提交,查看是否出现脏读。
</div>
<div style = color:black>(2)不可重复读(NON-REPEATABLE READ)</div>
<div style = color:blue>
教师讲解什么是不可重复读,所谓的不可重复读是指事务中两次查询的结果不一致,原因是在查询的过程中其他事务做了更新的操作。教师首先应给学生演示发生的不可重复读现象,然后将事务的隔离级别改为REPEATABLE READ(可重复读),最后验证不可重复读是否仍然出现。<br>
</div>
<div style = color:black>(3)幻读(PHANTOM READ)</div>
<div style = color:blue> 教师讲解什么是幻读,所谓的幻读又被称为虚读,是指在一个事务内两次查询中数据条数不一致,幻读和不可重复读有些类似,同样是在两次查询过程中,不同的是,幻读是由于其他事务做了插入记录的操作,导致记录数有所增加。教师首先应给学生演示发生的幻读现象,然后将事务的隔离级别改为REPEATABLE READ,最后验证幻读是否仍然出现。
</div>
<div style = color:black>(4)可串行化(SERIALIZABLE)</div>
<div style = color:blue> 教师讲解什么是SERIALIZABLE,SERIALIZABLE是事务的最高隔离级别,它在每个读的数据行上加上锁,使之不可能相互冲突,因此会导致大量的超时现象。教师首先将事务的隔离级别改为SERIALIZABLE,然后给学生演示在该隔离级别下发生的可串行化现象,最后验证幻读是否仍然出现。
</div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,布置作业</b></h5></div>
<div style = color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style = color:black>(2)使用测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第三课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(存储过程的创建)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、回顾上节课内容,继续讲解事务的隔离级别</b></h5></div>
<div style = color:black>(1)对上节课留的作业进行答疑。</div>
<div style = color:black>(2)进入本节课题,讲解存储过程的创建及需要用到的变量 </div>
<div style = color:blue> 存储过程就是一条或多条SQL语句的集合,当对数据库进行一系列复杂操作时,存储过程可以将这些复杂操作封装成一个代码块,以便重复使用,大大减少数据库开发人员的工作量。本节课将针对如何创建存储过程及创建存储过程时需要用到的变量等进行详细地讲解。</div>
<div style = color:black>(3)明确学习目标</div>
<div style = color:blue> 1、要求学生掌握如何创建存储过程、变量的使用</div>
<div style = color:blue> 2、要求学生了解如何定义条件和处理程序。</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进入重点知识点的讲解</b></h5></div>
<div style = color:black>(1)如何创建存储过程?</div>
<div style = color:blue> 教师首先讲解创建存储过程的语法,对语法格式进行分析,然后根据语法格式,通过一个具体的案例来演示如何创建存储过程(可参见教材例6-2)。在案例演示前,教师需先做好准备工作,在chapter06数据库中创建student表并插入相应的数据。最后对案例进行解释,并对案例中DELIMITER语句进行详细讲解。
</div>
<div style = color:black>(2)存储过程中变量的使用</div>
<div style = color:blue>
教师讲解存储过程中变量的作用范围,在MySQL中,变量可以在子程序中声明并使用,这些变量的作用范围是在BEGIN…END程序中。<br>
教师首先讲解存储过程中定义变量的语法格式,并对语法格式中涉及的内容进行讲解。然后根据定义变量的语法格式,编写一段示例代码。<br>
教师首先讲解存储过程中为变量赋值的语法格式,并对语法格式中涉及的内容进行讲解。然后根据定义变量的语法格式,编写一段示例代码。为变量赋值的方式,除了set之外,MySQL中还可以通过SELECT…INTO为一个或多个变量赋值,教师讲解SELECT…INTO的语法格式,并通过一个案例演示它的使用(可参见教材例6-3)。
</div>
<div style = color:black>(3)定义条件和处理程序</div>
<div style = color:blue> 教师讲解在存储过程中定义条件,首先讲解定义条件的语法格式,对语法格式进行分析,然后通过一个具体的案例演示用两种不同的方法来定义错误(可参见教材例6-4)。<br>
教师讲解在存储过程中定义处理程序,首先讲解定义处理程序的语法格式,对语法格式进行分析,然后通过一个具体的案例演示用两种不同的方法来定义错误(可参见教材例6-5)。最后教师再通过一个定义条件和处理程序的综合案例演示如何定义条件和处理程序(可参见教材例6-6)。
</div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,布置作业</b></h5></div>
<div style = color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style = color:black>(2)使用测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第四课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(光标的使用、流程控制的使用)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、回顾上节课内容,继续讲解光标和流程控制的使用</b></h5></div>
<div style = color:black>(1)对上节课留的作业进行答疑。</div>
<div style = color:black>(2)回顾总结上节课的内容,引出本节课主题 </div>
<div style = color:blue> 上节课讲解了创建存储过程、变量的使用、定义条件和处理程序,本节课将讲解光标和流程控制的使用。</div>
<div style = color:black>(3)明确学习目标</div>
<div style = color:blue> 1、要求学生掌握光标的使用</div>
<div style = color:blue> 2、要求学生掌握流程控制语句的使用</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进入重点知识点的讲解</b></h5></div>
<div style = color:black>(1)光标的使用</div>
<div style = color:blue> 教师首先讲解什么是光标,光标有什么作用。然后分别针对光标的声明、光标的使用、光标的关闭进行详细地讲解。<br>
讲解光标的声明时,首先提醒学生注意光标必须声明在声明变量、条件之后,声明处理程序之前。然后讲解光标的语法格式,对语法格式进行分析,最后根据语法格式编写一段示例代码,以便让学生更容易掌握。<br>
讲解光标的使用时,首先提醒学生使用光标之前首先要打开光标。然后讲解光标的语法格式,对语法格式进行分析,最后根据语法格式编写一段示例代码,以便让学生更容易掌握。
讲解光标的关闭时,由于关闭的语法比较简单也很容易理解,直接写出语法格式“CLOSE cursor_name”,给学生简单解释其中的“cursor_name”表示光标名即可
</div>
<div style = color:black>(2)流程控制的使用</div>
<div style = color:blue> 教师首先讲解流程控制语句用于将多个SQL语句划分或组合成符合业务逻辑的代码块。MySQL中的流程控制语句包括:IF语句、CASE语句、LOOP语句、WHILE语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句。然后分别针对这些语句进行一一讲解,按照先讲解语法格式,再通过示例代码或案例演示的方式,在讲解的过程中,教师还应该提醒学生注意每个知识点的重点内容。
</div>
</div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,布置作业</b></h5></div>
<div style = color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style = color:black>(2)使用测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第五课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(存储过程的使用)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、回顾上节课内容</b></h5></div>
<div style = color:black>(1)对上节课留的作业进行答疑。</div>
<div style = color:black>(2)进入本节课题,讲解调用和查看存储过程 </div>
<div style = color:blue> 通过前面课时的学习,我们已经能够定义一个完整的存储过程了。使用存储过程可以使程序执行效率更高、安全性更好,增强程序的可重用性和维护性。</div>
<div style = color:black>(3)明确学习目标</div>
<div style = color:blue> 1、要求学生掌握如何调用、修改和删除存储过程</div>
<div style = color:blue> 2、要求学生了解如何查看存储过程</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进入重点知识点的讲解</b></h5></div>
<div style = color:black>(1)如何调用存储过程?</div>
<div style = color:blue> 教师首先讲解调用存储过程的语法格式,语法格式具体如下:<br>
</div>
~~~
CALL sp_name([parameter[,…]])
~~~
<div style = color:blue> 然后对上述语法格式进行解释说明,比如sp_name为存储过程的名称,parameter为存储过程的参数,最后通过一个案例演示存储过程的调用(可参见教材例6-12)。</div>
<div style = color:black>(2)如何查看存储过程?</div>
<div style = color:blue>
查看存储过程的方式有三种,具体如下:
<li>通过SHOW STATUS语句查看存储过程的状态</li>
<li>通过SHOW CREATE语句查看存储过程的状态</li>
<li>从information_schema.Routines表中查看存储过程的信息
在讲解查看存储过程的三种方式时,应该遵循首先讲解其语法格式,对语法格式进行详细地解释说明,然后通过具体的案例演示的教学方式来讲解,在最后教师还应该对每种查看方式的使用进行一个总结,并提醒学生在学习过程中需要注意的东西。
</div>
<div style = color:blue>(3)如何修改存储过程?</div>
<div style = color:blue> 教师首先讲解修改存储过程的语法格式,语法格式具体如下:</div>
~~~
ALTER {PROCEDURE|FUNCTION} sp_name[characteristic…]
~~~
<div style = color:blue> 然后对上述语法格式进行解释说明,比如sp_name表示存储过程或函数的名称;characteristic表示要修改存储过程的哪个部分,其中characteristic的取值只需要学生了解,最后通过一个案例演示如何修改存储过程(可参见教材例6-15)。</div>
<div style = color:blue>(4)如何删除存储过程?</div>
<div style = color:blue> 教师首先讲解删除存储过程的语法格式,语法格式具体如下:</div>
~~~
DROP{ PROCEDURE|FUNCTION }[IF EXISTS] sp_name
~~~
<div style = color:blue> 然后对上述语法格式进行解释说明,比如sp_name 为要移除的存储过程的名称。IF EXISTS表示如果程序不存在,它可以避免发生错误,产生一个警告。最后通过一个案例演示如何删除存储过程(可参见教材例6-16)。</div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,布置作业</b></h5></div>
<div style = color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style = color:black>(2)使用测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第六课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(综合案例——存储过程的应用)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、回顾上节课内容</b></h5></div>
<div style = color:black>(1)对上节课留的作业进行答疑。</div>
<div style = color:black>(2)明确学习目标 </div>
<div style = color:blue> 要求学生熟悉在实际开发中,创建并使用存储过程的完整过程</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进入重点知识点的讲解</b></h5></div>
<div style = color:black>(1)在实际开发中,存储过程怎样应用?</div>
<div style = color:blue> 教师首先应该做好准备工作,在chapter06数据库中创建一个stu表,并向表中添加数据。然后创建一个存储过程addcount,该存储过程能够获取表stu中的记录数和id的和。教师在编写存储过程addcount时,先提问学生编写的思路,让学生带着思考来听接下来的教师讲解过程。最后教师逐行编写创建addcount存储过程的代码,边编写边解释。<br>
</div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,布置作业</b></h5></div>
<div style = color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style = color:black>(2)使用测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第七课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(上机练习)</b></h5></div>
<div style = color:blue> 上机练习主要针对本章中需要重点掌握的知识点,以及在程序中容易出错的内容进行练习,通过上机练习可以考察同学对知识点的掌握情况,对代码的熟练程度。</div>
<div style = vertical-align:top;text-align:left><h5><b>上机一:(考察知识点为光标的使用)</b></h5></div>
<div style = color:black>请按照以下要求创写出光标使用的语法格式</div>
<div style = color:black>要求如下:</div>
<div style = color:blue>1) 声明光标<br>
2) 打开光标,使用光标<br>
3) 关闭光标
</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第八课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(上机练习)</b></h5></div>
<div style = color:blue> 上机练习主要针对本章中需要重点掌握的知识点,以及在程序中容易出错的内容进行练习,通过上机练习可以考察同学对知识点的掌握情况,对代码的熟练程度。</div>
<div style = vertical-align:top;text-align:left><h5><b>上机一:(考察知识点为创建存储过程和存储过程中变量的使用)</b></h5></div>
<div style = color:black>请按照以下要求编写一个存储过程。</div>
<div style = color:black>要求如下:</div>
<div style = color:blue>1) 创建一个名为proc_add存储过程用于实现两个数相加<br>
2) 存储过程proc_add有两个输入参数,分别为a和b,均表示加数<br>
3) 定义一个变量c,用于接收两数相加的结果<br>
4) 当调用该存储过程时,能够输出c的值
</div>
</td>
</tr>
<tr>
<td width = 140px align = center><b>
思考题和习题</b>
</td>
<td colspan = 3>
</td>
</tr>
<tr>
<td width = 140px align = center><b>
教学后记
</b>
</td>
<td colspan = 3></td>
</tr>
</tbody>
</table>
-