第五章 数据库编程
**大家想一起学习交流的可以加群,WX:MrCroods。**
第一节 存储过程
一、存储过程的基本概念
(1)、存储过程是一组SQL语句集,可以由声明式的SQL语句和过程式SQL语句组成。
(2)、存储过程的优点:(简单题
)
1、可增强SQL语言的功能和灵活性
2、良好的封装性(可被重复调用,且不影响其他的应用程序。)
3、高性能(存储过程执行一次后,其执行规划就驻留在高速缓冲存储器中。)
4、可减少网络流量(由于存储过程在服务器端运行,网络中传送的只是该调用语句。)
5、存储过程可作为一种安全机制来确保数据库的安全性和数据的完整性。
二、创建存储过程
(1)、修改结束符:DELIMITER
l例子:
mysql> DELIMITER !!
mysql>
CREATE PROCEDURE sp_update_sex(存储过程名字)(IN cid INT,IN csex CHAR(1))
BEGIN
UPDATE customers SET cust_sex = csex WHERE cust_id = cid;
END !!
三、存储过程体
在存储过程体中可使用SQL语句和过程式语句的组合,来封装数据库应用中复杂的业务逻辑和处理规则。
(1)、声明局部变量
DECLARE cid INT(10);
1、局部变量注意事项:
局部变量只能在存储过程体的BEGIN…END语句块中声明。
局部变量必须在开头声明。
局部变量的作用范围仅限于BEGIN…END语句块中。
局部变量不同于用户变量,直接使用不需要在前面使用@符号
2、局部变量的作用:用来存储临时结果
(2)、局部变量赋值
SET cid = 910;
(3)、SELECT…INTO
SELECT col_name(列名) INTO var_name(变量名)table_expr(FROM后面的语法)
(4)、流程控制语句
1、条件判断语句
IF…THEN…ELSE语句
CASE语句
2、循环语句
WHILE、REPEAT、LOOP循环语句
ITERATE语句用于退出当前循环,且重新开始一个循环。
(5)、游标(选择题、填空题
)
游标的定义:一个被SELECT语句检索出来的结果集。
1、声明游标
DECLARE cursor_name(游标的名称) CURSOR FOR select_statement(select语句,不能用select…into…语句)
2、打开游标(每次打开的游标的结果集可能会不同)
OPEN cursor_name(游标的名称)
3、读取数据
FETCH cursor_name(游标的名称) INTO var_name(用于指定存放数据的变量名)
4、关闭游标
CLOSE cursor_name(游标的名称)没有关闭游标的语句,到达END语句时自动关闭。
5、注意事项
游标只能用于存储过程或存储函数中,不能单独在查询操作中使用。
在存储过程或存储函数中可以定义多个游标,但在一个BEGIN…END语句块中每一个游标的名字必须唯一。
游标不是一条SELECT语句,是被SELECT语句检索出来的结果集。
四、调用存储过程
CALL sp_name()语句使用CALL sp_name效果相同
CALL sp_name(parameter)
sp_name:调用的存储过程的名称
parameter:调用存储过程所要使用的参数。
五、删除存储过程
DROP PROCEDURE sp_name;
第二节 存储函数
存储函数与存储过程的区别:(
简答题
)
1、存储函数不能拥有输出函数,因为存储函数自身就是输出参数;而存储过程可以拥有输出函数
2、可以直接对存储函数进行调用,且不需要使用CALL语句;而存储过程的调用,需要使用CALL语句
3、存储函数中必须包含一条RETURN语句,而特殊SQL语句不允许包含存储过程中。
一、创建存储函数
(1)、创建存储函数
例子:
CREATE FUNCTION fn_search(存储函数的名称)(cid INT)(存储函数的参数,不能使用IN、OUT、INOUT关键字)
RETURNS(用于声明存储函数返回值的数据类型) CHAR(2)(用于指定返回值的数据类型)
DETERMINISTIC(routine_body,用于指定存储函数的主体部分)
二、调用存储函数
SELECT sp_name(存储函数的名称)
三、删除存储函数
DROP FUNCTION sp_name(存储函数的名称)