项目六总结:创建与使用存储过程

       SQL 语句没有流程控制,无法实现复杂的应用,PL/SQL 语言 (Procedural Language/SQL)是将结构化查询与数据库过程控制结合为一体的强大语言,PL/SQL 不旦支持更多的数据类型,拥有变量声明、赋值语句,而且有选择、循环等流程控制语句。
       系统开发过程中,经常会有同一个功能模块多次调用的情况,如果每次都编写代码会浪费大量的时间,为了解决这类问题,MySQL 5.0开始引入存储过程。存储过程是一组为了完成特定功能的 PL/SQL 语句集,经编译后存储在数据库中,用户可以重复使用该存储过程,这样可以降低数据库开发人员的工作量。
       游标是处理数据的一种方法,为了查看或处理结果集中的数据,游标提供了在结果集中一次一行浏览数据的能力。
       事务是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元。

【任务6.1】创建简单存储过程

1.PL/SQL的变量:

      变量是指在程序运行过程中其值可以改变的量,包括用户变量、系统变量和局部变量。
     (1)用户变量。用户可以在PL/SQL中使用自己定义的变量,这样的变量称为用户变量。可以先在用户变量中保存一个数据,然后在以后的语句中引用该变量,这样就可以将数据从一条语句传递到另一条语句。用户变量在使用前必须定义和初始化,如果使用没有初始化的变量,其值NULL。
定义和初始化一个用户变量可以使用SET语句,其语法格式为:
SET @<变量名1>=<表达式1>[,@<变量名2>=<表达式2>,…];

说明:
       ① 用户变量以“@”开始,形式为“@变量名”,以便将用户变量和字段名予以区别。变量名必须符合 MySQL标识符的命名规则,即变量可以由当前字符集的字母、数字、“.”“_”和“$”组成,默认字符集是cp1252(Latin 1)。
       ②<表达式>可以为整数、实数、字符串或NULL值,例如:

        SET @name"OPPO"
       ③一条定义语句中,可以同时定义多个用户变量,使用半角逗号分隔,例如:
        SET @name,@number.@unit;
     (2)系统变量。MySQL可以访问许多系统变量和连接变量,当服务器运行时许多变量可以动态更改。这样通常允许修改服务器操作而不需要停止并重启服务器。服务器维护两种变量,全局变量影响服务器整体操作,会话变量影响具体客户端连接的操作。
       系统变量一般都以“@@”为前缀,如@@Version 返回 MySQL的版本。但某些特定的系统变量可以省略“@@”符号,如Current_Date、Current_ Time 和Current_User。
     (3)局部变量,在语句块(BEGIN到Nnd间)中定义的变量为局部变量,局部变量可以保存特定类型数据,其有效作用范围在存储过程和自定义函数的语句块中,在语句块结束以后,局部变量就失效了。
       MySQL的局部变量必须先声明后使用。使用DECLARE语句声明局部变量,其声明语法格式为:
        DECLARE<变量名称><数据类型>[DEFAULT<默认值>];

        说明:
        ①“DEFAULT”子句为变量指定默认值,若不指定则默认为 NULL。
        ②变量名称必须符合MySQL标识符的命名规则,在局部变量前面不使用“@”符号。
        例如:
        DECLARE unit char(2);
        2.PL/SQL 的运算符及表达式
     (1)运算符。运算符用于执行程序代码运算,会针对一个以上操作数项目进行运算。MySQL 中的运算符主要有以下类型:
       ①算术运算符。算术运算符用于对表达式执行数学运算,操作数可以是任何数值类型。
MySQL中的算术运算符有+(加)、-(减)、*(乘)、/(除)、%(取模)。
       ②赋值运算符。“=”是MySQL中的赋值运算符,可以将表达式的值赋给一个变量。
       ③比较运算符。比较运算符用于对两个表达式进行比较,数字以浮点值进行比较,字符串以不区分大小写的方式进行比较,若表达式成立则返回1,否则返回 0。
       MySQL中的比较运算符有=(等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、<>(不等于)、!=(不等于)、<=>(相等或都等于空)。

      ④逻辑运算符。逻辑运算符用于对某些条件进行测试,以返回其真假。

MySQL中的逻辑运算符有And(与)、Or(或)、Not(非)。

      ⑤位运算符。位运算符用于对两个表达式执行二进制位操作
MySQL中的位运算符有&(位与)、|(位或)、^(位异或)、~(位取反)、>>(位右移)、<<(位左移)。
      ⑥一元运算符。一元运算符对一个操作数执行运算,该操作数可以是任何一种数据类型。
MySQL中的一元运算符有+(正)、-(负)和~(位取反)。
       (2)表达式。表达式是由操作数、运算符、分组符号(括号)和函数构成的组合, MySQL 可以对表达式进行运算以获取结果,一个表达式通常可以得到一个值。
       表达式的值同样具有字符类型、数值类型、日期时间类型等,根据表达式的值类型可分为字符型表达式、数值表达式和日期表达式。
       (3)运算符的优先级。当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序。执行的次序有时会影响所得到的运算结果。MySQL 运算符优先级如表 6-1所示,当一个表达式中的两个运算符有相同的优先级时,根据它们在表达式中的位置,一般而言,一元运算符按从右到左、(即右结合性)的顺序运算,二元运算符按从左到右(即左结合性)的顺序运算。
                                                  表 MySQL运算符优先级

优先级                                         运算符
最高                                             !
2                          -(负号)、~(按位取反)
3                                    ^(按位异或)
4

                            *、/(DIV)、%(MOD)

5                                           +、-
6                                         >>、<<
7                                            &
8                                            |

9

           =(比较运算)、<=>、<、<=、>、>=、!=、<>、

                     IN、IS、NULL、LIKE、REGEXP

10      BETWEEN AND、CASE、WHEN、THEN、ELSE
11                                           NOT
12                                       &&、AND
13                                  | |、OR 、XOR
最低                                            ;=

【任务6.2】创建带输入参数的存储过程

1.MySQL带输入参数的存储过程的创建:

创建带输入参数的存储过程的语法格式为:

CREATE PROCEDURE 存储过程名([形参列表])

BEGIN

<存储过程体>

END;

说明:存储过程可以不使用参数,也可以带一个或多个参数。

如果有多个参数,各个参数之间使用半角逗号分隔。参数的定义格式为:

[In]<参数名><参数类型>

2.调用存储过程:

存储过程创建完成后,可以在程序、触发器或其它存储过程中被调用,其语法格式为:

CALL 存储过程名([<实参列表>]);

说明:如果定义存储过程时使用了参数,那么调用该存储过程时,也要使用参数,并且参数个数和顺序必须一一对应。

【任务6.3】创建带输入和输出参数的存储过程

MySQL带输入和输出参数的存储过程创建的语法格式如下:

CREATE PROCEDURE 存储过程名([形参列表])

BEGIN

<存储过程体>

END;

说明:存储过程可以使用输入、输出和输入/输出参数。

参数的定义格式为:

[In|Out|InOut]<参数名><参数类型>

MySQL的存储过程支持3种类型的参数:输入类型、输出类型和输入/输出类型,关键字分别使用In、Out、InOut,省略参数传递类型默认为In。

【任务6.4】 创建应用游标的存储过程

为了方便用户对结果集中单条的记录行进行访问,MySQL提供了游标这种特殊的访问机制,它具有在查询结果集中向前或向后浏览数据、处理结果集中数据的能力。

MySQL 带游标的存储过程
(1)声明游标。其语法格式为:

DECLARE<游标名>CURSOR FOR<select 语句>;

说明:游标名称必须符合MySQL标识符的命名规则,select语句返回一行或多行记录数据,但不能使用into子句。

(2)打开游标。其语法格式为:

OPEN<游标名>;

说明:打开一个已经声明过的游标。

(3)读取游标。其语法格式为:

FETCH<游标名>INTO变量名1[,变量名2]···

说明:在指定打开的游标读取一行数据并赋给对应的变量,并且游标指针下移,向结果集的下一行。
(4)关闭游标。其语法格式为:

CLOSE<游标名>;

说明:关闭一个之前打开的游标。

【任务6.5】创建与使用事务

在MySQL操作过程中,一般简单的业务逻辑或中小型程序不用考虑应用事务。但在比较复杂的情况下,如果可能出现多项并行业务逻辑,就必须保证命令执行的同步性。使执行序列中,有关联的语句执行能够全部操作成功或全部返回初始状态。

1.事务的ACID特性
(1)原子性。一个事务(transaction)中的所有操作,要么全部执行,要么全部不执行。

(2)一致性。在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

(3)隔离性。MySQL数据库允许多个并发事务,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

(4)持久性。事务处理结束后,对数据的修改就是永久的。

2.事务控制语句
(1)开始事务。其语法格式为:

START TRANSACTION;

说明:用于显式地启动一个事务。

(2)提交事务。其语法格式为:

COMMIT;

说明:用于提交事务,将事务对数据所做的修改进行保存。

(3)设置保存点。其语法格式为:

SAVEPOINT<保存点名称>;

说明:用于在事务内设置保存点。

(4)撤销事务。其语法格式为:

ROLLBACK;ROLLBACK TO SAVEPOINT<保存点名称>;

        说明:撤销事务又称为事务回滚,即事务被执行后,如果执行的SQL语句导致业务逻辑不符或数据库操作错误,ROLLBACK语句撤销事务中所有的执行语句。ROLLBACK TO SAVEPOINT 语句撤销事务中保存点之后的执行语句。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值