内容正文:
9.4 MySQL的数据库编程
----存储函数
数据库原理与应用技术--MySQL
同步精品课堂
河北科学技术出版社
教学目标
一
了解存储函数的概念
教学目标
掌握存储函数的调用、删除命令
掌握存储函数的创建与修改命令
了解存储函数的作用
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学重难点
二
教学难点
1、存储函数与存储过程的区别
2、存储函数的相关命令
教学重点
存储函数的相关命令的应用
教学难点
导入新课
三
讨论:
存储函数是用户自定义的,内部函数是MySQL是开发者定义的,用户在定义好存储函数后,应该如何调用呢,又是如何修改的呢?
任务一
1
创建存储函数
新知讲授
四
⊙创建存储函数
➽创建存储函数
基本语法形式如下:
CREATE FUNCTION <函数名> ([参数名 数据类型[,....]])
RETURNS <返回类型>
BEGIN
<过程体>
END
新知讲授
四
⊙创建存储函数
➽实例:创建存储函数add_fun,参数定义为空,该函数查询学号为“20220101”的学生的地址。
MySQL语句如下:
CREATE FUNCTION add_fun( )
RETURNS varchar(255)
BEGIN
RETURN(
SELECT Address FROM student WHERE StuID=’20220101’
);
END
任务二
1
调用存储函数
新知讲授
四
⊙调用存储函数
➽调用存储函数
基本语法形式如下:
SELECT <函数名 (实参数名)>
说明:
存储函数的调用方法与MySQL内部函数的调用方法是一样的,用户自己定义的存储函数与MySQL内部函数是一个性质的。
新知讲授
四
⊙调用存储函数
➽实例:创建存储函数agecount_fun()函数,参数传入age,该函数查询相应年龄的学生数量并返回数据类型为整型。
MySQL语句如下:
CREATE FUNCTION agecount_fun(age INT )
RETURNS INT
BEGIN
RETURN(
SELECT count(*)FROM student WHERE Stuage=age);
END
调用存储函数:SELECT agecount_fun(16)
任务三
1
查看存储函数
新知讲授
四
⊙查看存储函数
➽1、使用SHOW STATUS语句查看存储函数的状态
基本语法形式如下:
SHOW FUNCTION STATUS [ LIKE <函数名 >]
➽ 2、使用SHOW CREATE语句查看存储函数的定义
基本语法形式如下:
SHOW CREATE FUNCTION <函数名>
新知讲授
四
⊙查看存储函数
➽ 3、从information_schema.Routines表中查看存储函数信息
基本语法形式如下:
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=’数据库名’;
➽ 实例:从information_schema.Routines表中查看存储函数add_fun的信息
MySQL语句如下:
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=’add_fun’;
任务四
1
修改存储函数
新知讲授
四
⊙修改存储函数
➽ 修改存储函数
基本语法形式如下:
ALTER FUNCTION <函数名> [characteristic ....]
说明:其中characteristic参数指定存储函数的特性,可能取值有:
1、CONTAINS SQL:子程序包含SQL语句,但不包含读或写数据的语句;
2、NO SQL: 子程序不包含SQL语句;
3、READS SQL DATA :子程序包含读数据的语句;
4、MODIFIES SQL DATA:子程序包含写数据的语句;
5、SQL SECURITY{DEFINER | INVOKER}:指明谁有权执行;
新知讲授
四
⊙修改存储函数
➽实例:修改存储函数add_fun的定义,将读写权限改为READS SQL DATA,并加上注释信息“FIND ADDRESS”
MySQL语句如下:
ALTER FUNCTION add_fun
READS SQL DATA
COMMENT ‘FIND ADDRESS’
任务五
1
删除存储函数
新知讲授
四
⊙删除存储函数
➽ 删除存储函数
基本语法形式如下:
DROP FUNCTION <IF EXISTS> [ 函数名 ]
➽ 实例:删除存储函数 add_fun。
MySQL语句如下:
DROP FUNCTION IF EXISTS add_fun;
师生互动
五
1、总结存储函数的创建、调用、查看等命令。
2、总结存储函数与存储过程在实际应用中的不同。
讨论
随堂练习
六
1、 关于存储函数与内部函数的主要区别是( )
A.存储函数是用户自定义的,而内部函数是MySQL的开发者定义的
B.存储函数是MySQL的开发者定义的,而内部函数是用户自定义的
C.存储函数和内部函数都是是用户自定义的
D.存储函数和内部函数都是MySQL的开发者定义的
【答案】A
【解析】存储函数是用户自定义的,内部函数是由MySQL的开发者定义的
随堂练习
六
2、下列选项中,用于创建存储函数的命令是( )
A.CREATE PROCEDURE
B.CREATE FUNCTION
C. CREATE TABLE
D. CREATE TRIGGER
【答案】B
【解析】创建存储函数的命令为:CREATE FUNCTION
随堂练习
六
3、存储函数的主体部分的开始和结束语句用( )表示。
A.START和FINISH
B.BEGIN和END
C.OPEN和CLOSE
D.FUNCTION和ENDFUNCTION
【答案】B
【解析】BEGIN和END用于表示存储函数体主体部分的开始和结束。
随堂练习
六
4、存储函数可以返回的数据类型是( )
A.只能是整数
B.只能是布尔类型
C.只能是字符串类型
D.任意数据类型
【答案】D
【解析】存储函数可以返回任意数据类型。
随堂练习
六
5、一个存储函数必须包含一个RETURNS语句。( )
【答案】对。RETURNS子句声明返回值类型只能在存储函数中使用,且一个存储函数必须包含一个RETURNS语句。
6、 删除存储过程和存储函数的命令是一样的。( )
【答案】错。删除存储过程的命令为DROP PROCEDURE IF EXISTS 存储过程名,而删除存储函数的命令是DROP FUNCTION IF EXISTS 存储函数名。
随堂练习
六
7、查看存储函数order_fun的定义___________。
【答案】SHOW CREATE FUNCTION order_fun
8、 删除存储函数order_fun的命令是__________。
【答案】DROP FUNCTION IF EXISTS order_fun
课堂小结
七
谢谢
$$