《MySQL入门很简单》学习笔记(13)之第14章存储过程和函数(关键词:MySQL/存储过程/存储函数/光标/游标)

来源:转载

    存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。

    存储过程和函数可以避免开发人员重复的编写相同的SQL语句。

    而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。



14.1 创建存储过程和函数

    是指将经常使用的一组SQL语句组合在一起,并将这些SQL语句当做一个整体存储在MySQL服务器中。


    14.1.1 创建存储过程

        语法:

            CREATE PROCEDURE sp_name([proc_parameter[,...]])    

                [characteristic...] routine_body

        其中:

            sp_name是存储过程的名称;

            pro_parameter表示存储过程的参数列表;

                pro_parameter中的每个参数由3部分组成,分别是:

                    输入输出类型、参数名称、参数类型,语法:

                        [ IN | OUT | INOUT ] param_name type

                        其中:

                            IN表示输入参数;

                            OUT表示输出参数;

                            INOUT表示既可以是输入,也可以是输出;

                            param_name参数是存储过程的参数名称;

                            type参数指定存储过程的参数类型,可以是MySQL数据库的任意数据类型;

            characteristic参数指定存储过程的特性;

                注意:

                    characteristic参数有多个取值,说明:

                        LANGUAGE SQL:说明routine_body部分是由SQL语言的语句组成,这也是数据库系统默认的语言;

                        [NOT] DETERMINISTIC:说明存储过程的执行结果是否是确定的;

                            DETERMINISTIC表示结果是确定的,每次执行存储过程时,相同的输入会得到相同的输出;

                            NOT DETERMINISTIC表示结果是非确定的,相同的输入可能得到不同的输出;

                        { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }:指明子程序使用SQL语句的限制;

                            CONTAINS SQL表示子程序包含SQL语句,但不包含读或写数据的语句;

                            NO SQL表示子程序中不包含SQL语句;

                            READS SQL DATA表示子程序中包含读数据的语句;

                            MODIFIES SQL DATA表示子程序中包含谢书记的语句;

                            默认情况下,系统会指定为CONTAINS SQL。

                        SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行。

                            DEFINER表示只有定义者自己才能够执行;

                            INVOKER表示调用者可以执行;

                            默认情况下,系统会指定为CONTAINS SQL。

                        COMMENT 'string':注释信息。

            routine_body参数是SQL代码的内容,可以用BEGIN...END来标志SQL代码的开始和结束。


    14.1.2 创建存储函数

        在MySQL中,语法:

            CREATE FUNCTION sp_name ([func_parameter[,...]])

                RETURNS type

                [characteristic...] routine_body

            说明:

                sp_name参数是存储函数的名称;

                func_parameter表示存储函数的参数列表;

                说明:

                    可以由多个参数组成,其中每个参数由参数名称和参数类型组成,形式:

                        param_name type

                        说明:

                            param_name参数是存储函数的参数名称;

                            type参数指定存储函数的参数类型,该类型可以是MySQL数据库的任意数据类型;

                RETURN type指定返回值的类型;

                characteristic参数指定存储函数的特性,该参数的取值与存储过程的取值是一样的;

                routine_body参数是SQL代码的内容,可以用BEGIN...END来标志SQL代码的开始和结束。


    14.1.3 变量的使用

        在存储过程和函数中,可以定义和使用变量。

        用户可以使用DECLARE关键字来定义变量,然后可以为变量赋值。

        这些变量的作用范围是BEGIN...END程序段中。


    14.1.4 定义条件和处理程序


    14.1.5 光标的使用

        查询语句可能查询出多条记录,在存储过程和函数中使用光标来逐条读取查询结果集中的记录。

        光标的使用包括:

            声明光标;

            打开光标;

            使用光标;

            关闭光标。

        1. 声明光标

            MySQL中使用DECLARE关键字来声明光标。

            语法:

                DECLARE cursor_name CURSOR FOR select_statement;

            说明:

                cursor_name参数表示光标的名称;

                select_statement参数表示SELECT语句的内容;

        2. 打开光标

            MySQL中,使用OPEN关键字来打开光标。

        语法:

            OPEN cursor_name;

        3. 使用光标

            MySQL中,使用FETCH关键字来使用光标。

        语法:

            FETCH cur_employee INTO var_name[,var_name...];

        4. 关闭光标

            MySQL中,使用CLOSE关键字来关闭光标。

        语法:

            CLOSE cursor_name;


    14.1.6 流程控制的使用

        存储过程和函数中,可以使用流程控制来控制语句的执行。

            包括:

                IF语句;

                CASE语句;

                LOOP语句;

                LEAVE语句;

                ITERATE语句;

                REPEAT语句;

                WHILE语句。


    14.2 调用存储过程和函数

        在


    14.3 查看存储过程和函数


    14.4 修改存储过程和函数


    14.5 删除存储过程和函数

        语法:

            DROP { PROCEDURE | FUNCTION } sp_name;

























分享给朋友:
您可能感兴趣的文章:
随机阅读: