《数据库高级应用技术》教案电子教案授课教案整本书教案电子讲义_第1页
《数据库高级应用技术》教案电子教案授课教案整本书教案电子讲义_第2页
《数据库高级应用技术》教案电子教案授课教案整本书教案电子讲义_第3页
《数据库高级应用技术》教案电子教案授课教案整本书教案电子讲义_第4页
《数据库高级应用技术》教案电子教案授课教案整本书教案电子讲义_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程教案

系部:_____________________

课程代码:_____________________

课程名称:_____________________

课程组成员:___________________

第一讲

教学周第1周节次第1、2节

章节内容关系数据库范式设计

授课方式理论课(V)讨论课()实验课(V)习题课()其他()

主要内容与教学目的:

1.数据库范式的概念

2.数据库范式的作用

3.数据库范式的原理

4.数据库范式的适用范围

重点:

三大范式的原理标准

难点:

数据库范式在数据库设计中的运用

课堂教学组织:

1、数据库范式的概念、作用

2、第一范式的标准

•数据库表中的字段都是单一属性,

•字段不可再分

•同一列中不能有多个值

3、第二范式的标准

•满足第一范式

•每张表均有主键

•单字段主键

•联合主键

4、第三范式的标准

•数据库表满足第二范式

•数据表的非主键字段不存在传递依赖关系

•非主键字段不能决定其它非主键字段

5、数据库范式应用举例

6、数据库范式错误纠正

拟提问题:

在进行数据库设计为什么要遵循数据库范式基本原则。

课后作业:

完成一个借书模块的数据库设计,需满足数据库三大范式,并符合如下的要求:

•读者人数众多、可借图书众多

•需维护读者的姓名、年龄、职业、学历、地址、电话、是否可借阅等信息

•需维护图书的书名、出版社、ISBN号-、出版日期、价格等信息

•需维护出借的日期、到期时间、是否续期等信息

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第二讲

教学周第1周节次第3、4节

章节内容数据库关系模式(D

授课方式理论课(J)讨论课()实验课()习题课()其他()

主要内容与教学目的:

1、关系数据库基本概念

2、关系模式定义

3、关系模式分解标准

重点:

关系模式分解标准

难点:

关系模式分解的函数传递依赖

课堂教学组织:

1、关系数据库基本概念

•关系(Relation)

•关系模式(RelationSchema)

•元组(Tuple)

•码(Key)

•超码(SuperKey)

•候选码(CandidateKey)

•主码(PrimaryKey)

2、关系模式定义

关系模式是由5个元素来定义,表示为:R(U,D,dom,I,F)

•R为关系名

•U为组成该关系的属性名的集合

•D为U中属性的域的集合

•dom为属性集U向域集D的映射

•I为完整约束集合

•F为属性间数据的依赖关系集合

3、关系模式分解标准

•分解具有无损连接性。

•分解要保持函数依赖性。

•分解既要保持函数依赖,又要具有无损连接性。

拟提问题:

关系与关系模式有什么联系与区别?

课后作业:

完成教材P14页练习题。

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第三讲

教学周第2周节次第5、6节

章节内容数据库关系模式(2)

授课方式理论课(V)讨论课()实验课()习题课()其他()

主要内容与教学目的:

1、关系模式分解原理

2、关系模式分解算法

重点:

无损连接分解过程

难点:

判别多元分解的无损性

课堂教学组织:

1、关系模式分解原理

•分解过程:

规范化过程中将一个关系模式分解为若干个关系模式,应该保证分解后产生的模式和原

来的模式等价。将一个关系模式R(U,F)分解为若干个关系模式R1(U1,F1),R2(U2,F2)…

Rn(Un,Fn)(其中U=U1U2…Un,R1为F在U1上的投影),这意味着相应的将存储在

一个二维表r中的数据分散到若干个二维表rl,r2,…,rn中(其中rl是r在属性组U1

上的投影)。

•有损分解

将关系r投影为rl,r2,•••,rn时并不会丢失信息,但对rl,r2,…,rn作自然连接可能会

产生一些原来r中没有的元组,从而无法区别那些元组是r中原来有的,即数据库中应

该存在的数据,在这个意义上丢失了信息。

•无损分解

关系模式R(U,F)分解为关系模式R1(U1,F1),R2(U2,F2)是具有无损连接性的分解的充

分必要条件是(U1CU2-U1-U2)6F+,或者(U2AUlfU2-U1)eF+

2、关系模式分解算法

•关系模式分解的分解算法中有如下几个重要引理:

(1)分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。

(2)若要求分解具有无损连接性,那么模式分解一定可以达到4NF。

(3)若要求分界保持函数依赖,那么模式分解可以达到3NF,但不一定能达到BCNF。

(4)若要求分解既具有无损连接性,又保持函数依赖,则模式分解可以达到3NF,但

不一定能达到BCNFo

•判别一个二元分解的无损连接性

若F+中至少存在如下函数依赖中的一个:

(1)(U1AU2)-U1-U2

(2)(U1AU2)-U2-U1

则P={R1<U1>,R2〈U2>}是R的无损分解。反之也成立。

拟提问题:

如何判别一个二元分解是否为无损连接分解?

课后作业:

自己动手,重新操作教材P12-13有损分解与无损分解例子。

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第四讲

教学周第2周节次第7、8节

章节内容关系数据库事务基本知识(1)

授课方式理论课(J)讨论课()实验课()习题课()其他()

主要内容与教学目的:

1、ACID特性

2、事务模型

3、并发事务

重点:

事务模型

难点:

并发事务控制

课堂教学组织:

1、ACID特性

•原子性(Atomicity)

•一致性(Consistency)

•隔离性(Isolation)

•持久性(Durability)

2、事务模型

•显式事务

•隐式事务

•自动事务

3、并发事务

当多个用户对同一数据进行操作时,会产生如下问题:

•丢失更新

•脏读

•非重复读

•幻读

拟提问题:

如何理解数据库事务的ACTD特性?

课后作业:

完成教材P26页练习题(1-6)。

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第五讲

教学周第3周节次第9、10节

章节内容关系数据库事务基本知识(2)

授课方式理论课讨论课()实验课()习题课()其他()

主要内容与教学目的:

1、隔离级别

2、事务锁

重点:

事务锁机制

难点:

合理设置事务隔离级别

课堂教学组织:

1、隔离级别

•未提交读(readuncommitted)

•提交读(readcommitted)

•可重复读(RepeatableRead)

•可串行化(Serializable)

2、事务锁

•共享锁(S锁)

共享封锁是为读操作设置的一种封锁,所以也称作读锁,或简称s锁

目的是想读到一组不变的数据,也就是在读数据的过程中,不允许其他用户对该数据进

行任何修改操作。

这种封锁可以保证最大的读并发性,任何数量的用户都可以同时对同样的数据施加这种

共享锁。已经实施共享锁的表拒绝来自其他事务的独占封锁和更新封锁。

•更新锁(U锁)

当需要对一个记录或一组记录进行更新时(不包括插入和删除)使用更新封锁,该封锁

的目的是防止其他用户在同一时刻修改同一记录。

已经实施更新封锁的记录,拒绝来自其他用户的任何封锁。

•排他锁(X锁)

排他封锁也叫独占封锁,

它是为写(修改、增加、删除)操作设置的一种封锁,也称为写封锁,或简称为X锁,

这是最严格的一类封锁。当需要对表实施插入、删除或修改操作时,应该使用独占封锁。

已经实施独占封锁的表,拒绝来自其他用户的任何封锁。

拟提问题:

死锁产生的原因与条件?

课后作业:

完成教材P26练习题(7-12)。

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第六讲

教学周第3周节次第11、12节

章节内容关系数据库事务操作

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、隔离级别设置

2、手动事务控制操作

3、自动事务控制操作

重点:

事务控制操作

难点:

恰当使用事务维护数据准确性

课堂教学组织:

1、隔离级别设置

查询事务隔离级别

•SELECT@@global.txisolation

设置事务隔离级别

MySQL引擎为:innodb的事务级别设置方法是:

•set+作用域+transactionisolationlevel+隔离级别

设置隔离级别为:未提交读

setglobaltransactionisolationlevelREADUNCOMMITTED

设置隔离级别为:提交读

setglobaltransactionisolationlevelREADCOMITTED

设置隔离级别为:可重复读

setglobaltransactionisolationlevelREPEATABLEREAD

设置隔离级别为:可串行化

setglobaltransactionisolationlevelSERIALIZABLE

2、事务控制操作

语法命令

•开启事务

方式一

starttransaction

方式二

begin

•提交事务

commit

•回滚事务

rollback

拟提问题:

常用的关系数据库事务操作命令有哪些?

课后作业:

按要求建立数据库表环境,并用事务命令进行按要求进行事务控制操作。

•建立学生表、课程表、学生选课表

/学生表:学号、姓名、年级、专业、入学年份、已修学分等

/课程表:课程号、课程名、学分、课程性质(选修、必修)、课程归属专业等

/学生选课表:学号、课程号、成绩

往以上数据表插入若干条记录

•在数据库命令行带事务(成功/失败)进行以下操作

/增加一个学生数据(同时往三张表写入对应数据)

/删除一个学生数据(同时删除三张表对应的此学生数据)

/修改某门课程的性质,同时修改此门课程对应的学生的成绩。

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第七讲

教学周第4周节次第13、14节

章节内容存储过程基本语法(1)

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、存储过程的种类

2、存储过程创建

3、储过程调用

重点:

存储过程创建

难点:

存储过程创建语法调试

课堂教学组织:

1、存储过程的种类

•系统存储过程

•本地存储过程

•临时存储过程

•远程存储过程

•扩展存储过程

2、存储过程创建

创建语法格式:

CREATEPROCEDURE存储过程名([过程参数[,..」])

BEGIN

过程控制语句(Transaction-SQL)

END

3、储过程调用

调用格式如下:

CALL+存储过程名+参数

例如:CALLfirst_proc(100)

拟提问题:

存储过程与单条SQL语句有什么联系与区别?

课后作业:

自己动手,在数据库客户端逐一创建、运行本次课PPT讲稿上的每个例子。

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第八讲

教学周第4周节次第15、16节

章节内容存储过程基本语法(2)

授课方式理论课(J)讨论课()实验课(习题课()其他()

主要内容与教学目的:

1、IN输入参数

2、OUT输出参数

3、INOUT输入输出参数

重点:

全部

难点:

根据场合灵活选择合适的参数类型

课堂教学组织:

1、IN输入参数

表示该参数为输入型参数,只能从外面传值到存储过程内部,反过来则无效,即:在存

储过程内部修改该参数值将不会返回到外部。此参数值必须在调用存储过程中指定。

•IN参数案例:

DELIMITER//

CREATEPROCEDUREdemoinparameter(INpidint,INpscoreaddint)

BEGIN

updateusersetscore=(score+pscoreadd)whereuserid=pid;

END;

//

DELIMITER;

2、OUT输出参数

表示该参数为输出型参数,只能从存储过程内部传值到存储过程外部,反过来则无效,

即:该值可在存储过程内部被改变,并可返回。此参数值必须在调用存储调用过程中赋

值。

•OUT参数案例:

DELIMITER//

CREATEPROCEDUREdemooutparameter(OUTpoutint)

BEGIN

SELECTCOUNT(*)INTOpoutFROMuser;

END

//

DELIMITER;

3.INOUT输入输出参数

表示该参数为输入输出型参数,同时俱备输入、输出功能,既可从外面传值到存储过程

内部,也可以从存储过程内部传值到存储过程外部。

•INOUT参数案例:

DELIMITER//

CREATEPROCEDUREdemo_inout_parameter

(INOUTp_inout_numint,INOUTp_inout_strvarchar(50))

BEGIN

DECLAREidintdefault0;

SETid=p_inout_num;

UPDATEuserSETemail=pinoutstrWHEREuserid=id;

SELECTscoreINTOp_inout_numFROMuserWHEREuser_id=id;

SELECTphoneINTOp_inout_strFROMuserWHEREuser_id=id;

END

//

DELIMITER;

拟提问题:

存储过程的OUT参数与编程语言中方法的返回值有什么异同?

课后作业:

写一个存储过程,实现以下功能:

2、把上面USRE表中积分(score)大于60的用户同步到一个VIP_USER表中

3、给积分60以下的女性会员(sex字段值为0),每人加5分

4、返回以上操作以后男会员的平均分与女会员的平均分

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第九讲

教学周第5周节次第17、18节

章节内容存储过程基本语法(3)

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、会话变量

2、存储过程变量

重点:

存储过程变量

难点:

变量作用范围

课堂教学组织:

1、会话变量

会话变量也叫用户变量,可以在一个客户端会话的任何地方声明,作用域是整个会话,

会话断开后,会话变量也就消失。

•会话变量定义:

会话变量名以@开头,使用set直接赋值,在一个会话内,会话变量只须初始化一次。

例如:SET@num=l

表示声明了一个名字叫“@num”的会话变量,其初始值为1。

2、存储过程变量

存储过程变量,只能在存储过程中使用,存储过程变量存在于数据库服务器上,而不是

在于客户端。

•存储过程变量的按如下格式定义:

DECLARE+变量名+数据类型+[DEFAULTVALUE]

①DECLARE为声明存储过程变量的关键字;

②变量名可以任意,但尽可能要达到能表意的目的;

③数据类型为MySQL的数据类型,如:int,float,date,varchar(length);

©[DEFAULTVALUE]为变量的初始值,可有可无,若不指定,则自动赋null值。

•存储过程变量赋值

变量赋值采用关键字SET开头,后面跟变量名,赋值符号用等号“="表示,等号的

右边为所需要赋予的值,可以是具体值,也可以是个表达式,还可以是个查询返回值。

赋值格式:SET变量名=表达式值

•变量取值

存储过程变量的取值与其它面向对象的编程语言一样,直接调用变量名就可以取得变

量上存储的值。

•变量作用范围:

存储过程变量为数据库服务器上的变量,存储在服务器中,但其作用域并不能认为是

整个数据库服务器。

存储过程变量作用域的认定按下三个步骤进行:

①.从变量所在位置开始,往上回溯,从最靠近变量的第一个begin开始;

②.往下延伸,找到与上面begin相匹配的end结束;

③.内部的变量比外部变量在其作用域范围内享有更高的优先权。

拟提问题:

存储过程变量与会话的异同?

课后作业:

写一个存储过程,实现以下功能:

•给本章教材上User表,增加一个备注字段(mark)

•用DECLARE定义几个存储过程变量

•变量1值为:“不活跃会员”

•变量2值为:“普通会员”

•变量3值为:“高级会员”

•根据上面定义的变量填充mark字段

•如果积分在60分以下,填充变量1的值

•如果积分在60-79分,填充变量2的值

•如果积分在80分以上,填充变量3的值

•返回以上操作以后每个等级会员的个数

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十讲

教学周第5周节次第19、20节

章节内容存储过程流程控制TF条件语句

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、IF语句结构

2、IF条件函数

重点:

IF语句

难点:

IF条件函数灵活运用

课堂教学组织:

1、1F语句结构

IF语句是最普通的条件控制语句,其语法简单易懂,在存储过程代码中随处可见,也

是使用频率最高的条件判断语句。

•语法格式:if…then…elseif…then…else…endif

/if后面跟判断条件

/elseif后面跟判断条件

/then后面跟条件分支语句块

“可以有多个elseif…then语句块,也可以没有

/else表示以上条件均不满足时会执行的语句块

/整个条件语句块的最后面以endif表示结束

•IF语句案例:

DELIMITER//

CREATEPROCEDUREproc_iCelse(INifLparameterint)

begin

declarecondition_paraint;

setcondition_para=ifLparameter;

ifcondition_para=1then

INSERTINTO'user'

('user_name','pass_word','email、,'phone','sex','score')

VALUES

('ifLuser*,'if_user7if_user@,,188888888,,W,!00);

elseifcondition_para=2then

update'user'setscore=200whereuser_id<=5;

elseifcondition_para=3then

update'user'setscore=400whereuser_id>5;

else

update'user'setscore=1000;

endif;

end;

//

DELIMITER;

2、IF条件函数

•IF语法格式:

IF(exprl,expr2,expr3)

(1)如果exprl是TRUE则IF()的返回值为expr2

(2)否则返回值则为expr3

(3)IF()的返回值为数字值或字符串值

如:SELECTUSER_NAME,IF(SCORE>60,'钻石级普通级')AS'等级'FROMUSER

拟提问题:

存储过程IF条件控制与编程语言中的IF条件控制语句有哪些异同点?

课后作业:

写一个存储过程,用不同的方法实现以下功能:

•如果输入参数值为1,把user表数据同步到user_info表;

•如果输入参数值为2,删除user_info表数据;

•如果输入参数值为3,把user表数据同步到user_bak表;

•如果输入参数值为4,删除usejbak表数据;

•如果输入参数值为5,同时删除user_info、user_bak表数据。

user、userinfo、userbak三个表结构相同,参考本章教材上user.sql脚本

•用if…then…elseif…then…else语句实现

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十一讲

教学周第6周节次第21、22节

章节内容存储过程流程控制-CASE条件语句

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、CASE语句结构

2、SELECT语句中CASE语法

重点:

CASE语句结构

难点:

SELECT语句中CASE语法

课堂教学组织:

1、CASE语句结构

CASE语句灵活性非常高,不但可以用在存储过程中,也可以用在单个的SQL语句中

作条件选择。

•语法格式:case…when…then…else

/case后面跟条件变量

/when后面跟条件值

/then后面跟条件分支语句块

/可以有多个when…then语句块,也可以只有有一个

/else表示以上条件均不满足时会执行的语句块

/整个条件语句块最后面以endcase表示结束

•CASE语句案例:

DELIMITER//

CREATEPROCEDUREproc_case_when(INcase_parameterint)

begin

declarecondition_paraint;

setcondition_para=case_parameter;

casecondition_para

when1then

INSERTINTO'user'

('user_name','pass_word'email'phone'sex'score')

VALUES

('case_user7case_userVcase_user@',7777777701,200);

when2then

update'user'setscore=300whereuser_id<=5;

when3then

update'user'setscore=600whereuser_id>5;

else

update'user'setscore=2000;

endcase;

end;

//

DELIMITER;

2、单个SQL语句CASE语法格式:

/SELECTCASEWHENA条件THEN字段1WHENB条件THEN字段2

ELSE字段0ENDfromtb

拟提问题:

存储过程CASE条件控制与编程语言中的哪种条件控制语句非常类似?

课后作业:

写一个存储过程,用不同的方法实现以下功能:

•如果输入参数值为1,把user表数据同步到user_info表;

•如果输入参数值为2,删除usejinfo表数据;

•如果输入参数值为3,把user表数据同步到user_bak表;

•如果输入参数值为4,删除usejbak表数据;

•如果输入参数值为5,同时删除user_info、user_bak表数据。

•user、user_info、user_bak三个表结构相同,参考本章教材上user.sql脚本

•用case…when…then…else语句实现

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十二讲

教学周第6周节次第23、24节

章节内容存储过程流程控制-WHILE循环语句

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、WHILE语句结构

重点:

WHILE语句

难点:

WHILE循环语句的使用场景

课堂教学组织:

1、循环语句的使用场景

存储过程中需要重复执行某些代码语句,执行这些语句就需要考虑用循环控制语句。循

环控制语句是由循环体及循环的终止条件两部分组成的,被重复执行的语句称为循环

体,循环的终止条件一旦出现,程序流程就会跨出循环体。

2、WHILE语句结构

•WHILE语法

/语法格式:WHILE-DO

/WHILE后面跟条件表达式

/DO后面跟条件分支语句块

/整个条件语句块最后面以ENDWHILE表示结束

•WHILE语句案例

DELIMITER//

CREATEPROCEDUREproc_while_do()

begin

declareaint;

seta=0;

whilea<100do

INSERTINTO'user'

('user_name','pass_word','email','phone','sex','score')

VALUES

(tase-user'/case-user1,'case_user@',7777777,,,0\a);

seta=a+1;

endwhile;

end;

//

DELIMITER;

拟提问题:

WHILE语句与编程语言中WHILE语句有何区别?

课后作业:

写一个存储过程,用不同的方法实现以下功能:

•往User_Info表、User_Bak表各插入500条记录

•User_Info>User_Bak表与User表结构相同,参考本章教材上user.sql脚本

•用while…do循环语句实现

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十三讲

教学周第7周节次第25、26节

章节内容存储过程流程控制-LOOP循环语句

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、LOOP语句结构

重点:

LOOP语句

难点:

LOOP循环语句的使用场景

课堂教学组织:

1、循环语句的使用场景

存储过程中需要重复执行某些代码语句,执行这些语句就需要考虑用循环控制语句。循

环控制语句是由循环体及循环的终止条件两部分组成的,被重复执行的语句称为循环

体,循环的终止条件一旦出现,程序流程就会跨出循环体。

2、LOOP语句

•LOOP语法

/语法格式:LOOP-LEAVE

/LOOP循环不需要初始条件

/LOOP循环格式:循环标识+:+LOOP

/不需要结束条件,LEAVE语句即表示跳出循环

/LEAVE的格式是:LEAVE+循环标识

/整个条件语句块最后面以ENDLOOP表示结束

•LOOP语句案例

DELIMITER//

CREATEPROCEDUREprocJoop()

begin

declarecint;

setc=0;

LOOP_LABLE:loop

INSERTINTO'user、

('user_name\'pass_word\'emair/phone\'sex\'score')

VALUES

('loop_user','loop_user',,loop_user@','22222222,/0,,c);

setc=c+1;

ifc>=400then

leaveLOOP_LABLE;

endif;

endloop;

end;

//

DELIMITER;

拟提问题:

LOOP语句与WHILE语句有何区别?

课后作业:

写一个存储过程,用不同的方法实现以下功能:

•往User_Info表、User_Bak表各插入500条记录

•User_Info、User_Bak表与User表结构相同,参考本章教材上user.sql脚本

•用loop循环语句实现

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十四讲

教学周第7周节次第27、28节

章节内容存储过程流程控制-REPEAT循环语句

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、REPEAT语句结构

重点:

REPEAT语句

难点:

REPEAT语句的跳出循环条件

课堂教学组织:

1、循环语句的使用场景

存储过程中需要重复执行某些代码语句,执行这些语句就需要考虑用循环控制语句。循

环控制语句是由循环体及循环的终止条件两部分组成的,被重复执行的语句称为循环

体,循环的终止条件一旦出现,程序流程就会跨出循环体。

2、REPEAT语句

•REPEAT语法

/语法格式:REPEAT-UNTIL

/UNTIL后面跟条件表达式

/REPEAT后面跟条件分支语句块

/整个条件语句块最后面以ENDREPEAT表示结束

/先执行REPEAT操作后检查UNTIL条件语句,而WHILE则是执行前进行检

查。

•REPEAT语句案例

DELIMITER//

CREATEPROCEDUREproc_repeat_until()

begin

declarebint;

setb=0;

repeat

INSERTINTO'user、

('user_name','pass_word','email','phone','sex','score')

VALUES

CrepeaCuserVrepeaCusef/repeaCuserCaJ'/l111l','0',b);

setb=b+1;

untilb>=200

endrepeat;

end;

//

DELIMITER;

拟提问题:

REPEAT语句与WHILE语句有何异同?

课后作业:

写一个存储过程,用不同的方法实现以下功能:

•往User_Info表、User_Bak表各插入500条记录

•User_Info>User_Bak表与User表结构相同,参考本章教材上user.sql脚本

•用repeat循环语句实现

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十五讲

教学周第8周节次第29、30节

章节内容存储过程流程控制-注释语句与函数

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、注释语句

2、数据库函数

重点:

注释语句

难点:

灵活运用数据库函数

课堂教学组织:

1、注释语句

存储过程(MySQL)有两种风格的注释形式,如下:

•双模杠:

+空格

该风格一般用于单行注释

如:—DECLAREmypassCHAR(IO);

•编程风格:

/*...*/

一般用于多行注释

如:/*SETmystr='birds';*/

2、数据库函数

开发人员常用使用的数据库函数有三种类型:字符串类型函数、数学类型函数、日期类

型函数

•字符串类型函数

LCASE(string)

转换成小写

UCASE(string)

转换成大写

REPLACE(str,search_str,replace_str)

在str中用replace_str替换search_str

SUBSTRING(str,pos,length)

从str的pos位置开始,取length个字符,pos从1开始

•数学类函数

ABS(number)

绝对值

MOD(numeratordenominator)

求余

SQRT(number)

开平方

RAND()

随机数

•日期类函数

CURRENT_DATE()

取得当前日期,只包含:年、月、日

CURRENT_TIME()

取得当前时间,只包含:时、分、秒

NOW()

取得当前时间,包含:年、月、日、时、分、秒

拟提问题:

存储过程的注释语句与编程语言中的注释语句有何异同?

课后作业:

完成教材P59练习题

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十六讲

教学周第8周节次第31、32节

章节内容存储过程-游标

授课方式理论课(J)讨论课()实验课(J)习题课()其他()

主要内容与教学目的:

1、游标的作用

2、游标的属性

3、定义游标

4、使用游标

重点:

游标的使用过程

难点:

NOTFOUND条件处理函数

课堂教学组织:

1、游标的作用及属性

•游标的作用是:

对查询数据库所返回的记录进行遍历

•游标如下属性:

游标是只读的,也就是不能更新它

游标是不能滚动的,也就是只能在一个方向上进行遍历,不能在记录之间随意进退,

不能跳过某些记录

避免在已经打开游标的表上更新数据

2、声明游标

•语法格式:DECLARE+游标名+CURSORFOR+SELECT语句

DECLARE为声明游标的关键字,后面跟游标的名称,CURSORFOR表示游标要操作

的数据结果集,后面跟一条数据库的SELECT检索语句。例如,下面语句声明了一个

叫mycoursor的游标:

DECLAREmycoursorCURSORFORselectuser_name,passwordfromuser

3、打开游标

•语法格式:OPEN+游标名

OPEN为打开游标的关键字,在使用游标前,先要把游标打开,才能进行其它的操作。

例如,下面语句打开了一个叫mycoursor的游标:

OPENmycoursor

4、操作游标

•语法格式:FETCH+游标名+INTO+变量列表

FETCH为移动游标的关键字,每调用一次,游标指针往下移动一条记录。FETCH后

面跟游标的名称,表示要操作的是那个游标,关键字INTO表示把取得数据装到本地,

后面跟一系列的本地变量列表。例如,下面的语句表示把mycoursor游标的一行记录

装进my_name、my_pwd变量,my_name、my_pwd两个变量需提前定义好。

FETCHmycoursorINTOmy_name,my_pwd

5、关闭游标

•语法格式:CLOSE+游标名

CLOSE为关闭游标的关键字,后面跟游标的名称,在游标使用完毕后,需要把游标关

闭,以释放游标所占据的资源。例如,下面语句关闭了一个叫mycoursor的游标:

6、NOTFOUND条件处理函数

为了避免游标到达记录的末尾时避免出现“nodatatofetch”这样的错误,需要定义一

个:NOTFOUND条件处理函数。

•语句格式:

DECLARECONTINUEHANDLERFORNOTFOUND+需要执行的语句

拟提问题:

使用游标有什么利弊?

课后作业:

参考本章教材的student.sql脚本创建表环境,然后按要求实现以下功能:

•用存储过程及游标为student_info表统计各个学生总分(total)字段值

・总分=数学成绩+语文成绩+音乐成绩+历史成绩

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十七讲

教学周第9周节次第33、34节

章节内容存储过程-实验课

授课方式理论课()讨论课()实验课(J)习题课(J)其他()

主要内容与教学目的:

1、参数类型

2、变量定义

3、条件选择分支结构

4、循环控制结构

重点:

条件选择分支结构

循环控制结构

难点:

SQL语句的熟练运用

课堂教学组织:

1、任务一

参考教材orderl.sqkorder2.sql脚本创建数据表环境,用存储过程对商品销售明细表

(order_detail)作如下统计操作:

•按月统计出7、8月份的销售金额

•把数据汇总到月销售汇总表(order_month)

•按商品类型统计出各种类型商品销售金额

•把数据汇总到类型销售汇总表(order_total_type)

•按月份及商品类型统计出7、8月份各种类型商品销售金额

•把数据汇总到月类型销售汇总表(order_total_type_month)

数据迁移参考语句:

insertintonew_table(columnl,column2)selectcolumn1,column?fromold_table

2、任务二

用存储过程实现以下功能

•创建一个业务表

/创建表前先判断此表是否存在,如果存在先删除

/字段满足如下要求

/ID自增

/业务名称字段为字符串类型

/订阅时间字段为日期类型

/收费方式字段(0:按流量收取、1:按小时收、2:按日收、3:按月收、4:按年收)

/是否生效字段(0:未生效、1:已生效)

•用循环往业务表插入1000条记录

•按ID字段排序(升序)检索出251-300行业务数据

/收费方式字段显示

/“按流量收取”或“按小时收取”或“按日收取”或“按年收取”

/是否生效字段显示

/“未生效”或“已生效”

3、任务三

参考教材course.sql脚本创建表环境,然后按要求实现以下功能:

•用存储过程统计各个学生是否达到最低修读要求:

/若course_student表中成绩字段(course_score)大于60分,则学生取得该门课

程学分

,每门课程的学分(credit)在course表中可查询到

/若某学生的所取得的全部学分大于7分,则该学生达到最低修学要求,在

student表的mark字段标注“合格”,否则标注“不合格”

拟提问题:

课后作业:

自己动手,在数据库客户端逐一创建、运行本次实验课的每个例子。

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十八讲

教学周第9周节次第35、36节

章节内容触发器基本语法(1)

授课方式理论课(J)讨论课()实验课()习题课()其他()

主要内容与教学目的:

1、触发器作用

2、触发器原理

3、触发器语法

重点:

触发器语法

难点:

触发器临时表

课堂教学组织:

I、触发器作用

•数据安全

/可以以基于时间限制用户的操作

/可以基于数据库中的数据限制用户的操作

•数据审计

/审计用户操作数据库的语句

/把用户对数据库的更新写入审计表

•数据约束

/实现数据完整性检查和约束

/提供可变的缺省值

•数据连环更新

/修改或删除时级联修改或删除其它表中的与之匹配的行

/修改或删除时把其它表中与之匹配的行设成NULL值

/修改或删除时把其它表中与之匹配的行级联设成缺省值

2、触发器原理

触发器具有强大的功能,每个触发器有两个特殊的表,分别为:插入表和删除表,有

以下几个特点:

(1)这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在

数据库中,因此不允许用户直接对其修改。

(2)这两个表的结构总是与被该触发器作用的表有相同的表结构。

(3)这两个表是动态驻留在内存中的,当触发器工作完成,这两个表也被删除。这两

个表主要保存因用户操作而被影响到的原数据值或新数据值。

(4)这两个表是只读的,且只在触发器内部可读,即用户不能向这两个表写入内容,

但可以在触发器中引用表中的数据。

3、触发器语法:

•创建语法格式:

CREATETRIGGER+触发器名称+触发时间点+触发事件+ON+表名+FOR

EACHROW

BEGIN

END

触发时间点:

BEFORE或AFTER

指明是在触发事件之前还是之后执行

触发事件:

INSERT,UPDATE、DELETE事件

如,以下语句创建一个名字叫:upd_check的触发器,其在对account表作更新

(UPDATE)操作之前(BEFORE)自动触发。

CREATETRIGGERupd.checkBEFOREUPDATEONaccountFOREACHROW

BEGIN

END

•删除语法格式:

DROPTRIGGER+触发器名称

如,以下语句删除了一个名字叫:upd_check的触发器。

DROPTRIGGERupd_check

•触发器案例

当往tabi表添加记录后将解发此触发器,将此新记录同时插入到tab2表中。

DELIMITER//

DROPTRIGGERIFEXISTSt_afterinsert_on_tabl;

CREATETRIGGERt_afterinsert_on_tab1

AFTERINSERTONtabiFOREACHROW

BEGIN

insertintotab2(tab2_id)values(new.tabl_id);

END;

//

DELIMITER;

拟提问题:

触发器与存储过程有什么异同?

课后作业:

完成教材P79练习题

注:每两节课(90分钟)为一讲,每讲必须填写此表。

第十九讲

教学周第10周节

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论