第6章 事物与存储过程_第1页
第6章 事物与存储过程_第2页
第6章 事物与存储过程_第3页
第6章 事物与存储过程_第4页
第6章 事物与存储过程_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

1、让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效第六章 事务与存储过程事务管理存储过程的使用存储过程的创建综合案例让IT教学更简单,让IT学习更有效 学习目标掌握开启、提交和回滚事务、 存储过程的创建和使用12熟悉事务的四种隔离级别3了解事务的概念掌握了解熟悉让IT教学更简单,让IT学习更有效 目录事务管理6.16.1点击查看本小节知识架构存储过程的创建6.26.2点击查看本小节知识架构存储过程的使用6.36.3综合案例存储过程应用6.46.4点击查看本小节知识架构让IT教学更简单,让IT学习更有效 知识架构6.1 事务管理返回目录6.1.1事务的概念6.1.2事务的提交6

2、.1.3事务的回滚事务的隔离级别6.1.4让IT教学更简单,让IT学习更有效 知识架构6.2 存储过程的创建返回目录6.2.1创建存储过程6.2.2变量的使用6.2.3定义条件和处理程序6.2.4光标的使用6.2.5流程控制的使用让IT教学更简单,让IT学习更有效 知识架构6.3 存储过程的使用返回目录6.3.1调用存储过程6.3.2查看存储过程6.3.3修改存储过程6.3.4删除存储过程让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.1 事务的概念事务的概念 所谓的事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,同一个事务的操作具备同步的特点,如果其中有一条语句无

3、法执行,那么所有的语句都不会执行,也就是说,事务中的语句要么都执行,要么都不执行。 开启事务的语句,具体如下: 提交事务的语句,具体如下START TRANSACTION;COMMIT;让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.1 事务的概念事务的概念 回滚事务的语句,具体如下: 需要注意的是, ROLLBACK语句只能针对未提交的事务执行回滚操作,已提交的事务是不能回滚的。 接下来通过一个转账的案例来演示如何使用事务。ROLLBACK;让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.1 事务的概念事务的概念 在演示之前首先需要创建一个名称为chapter06的数

4、据库,并且在chapter06中创建一个account表,插入相应的数据,SQL语句具体如下:让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.1 事务的概念事务的概念 【例6-1】首先开启一个事务,然后通过UPDATE语句将a账户的100元钱转给b账户,最后提交事务,具体语句如下: 上述语句执行成功后,可以使用SELECT语句来查询account表中的余额,查询结果如下:让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.1 事务的概念事务的概念 事务有很严格的定义,它必须同时满足四个特性,针对这四个特性的讲解,具体如下: (1)原子性(Atomicity) 原子性是指一个

5、事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功,事务中如果有任何一个SQL语句执行失败,已经执行成功的SQL语句也必须撤销,数据库的状态退回到执行事务前的状态。让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.1 事务的概念事务的概念 事务有很严格的定义,它必须同时满足四个特性,针对这四个特性的讲解,具体如下: (2)一致性(Consistency) 一致性是指事务将数据库从一种状态转变为下一种一致的状态。例如,在表中有一个字段为姓名,具有唯一约束,即姓名不能重复,如果一个事务对姓名进行了修改,使姓名变得不唯一了,这就破坏了事务的

6、一致性要求,如果事务中的某个动作失败了,系统可以自动撤销事务,返回初始化的状态。让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.1 事务的概念事务的概念 事务有很严格的定义,它必须同时满足四个特性,针对这四个特性的讲解,具体如下: (3)隔离性(Isolation) 隔离性还可以称为并发控制、可串行化、锁等,当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.1 事务的概念事务的概念 事务有很严格的定义,它必须同时满足四个特性,针对这四个特性的讲解,具体如下

7、: (4)持久性(Durability) 事务一旦提交,其所做的修改就会永久保存到数据库中,即使数据库发生故障也不应该对其有任何影响。需要注意的是,事务的持久性不能做到100%的持久,只能从事务本身的角度来保证永久性,而一些外部原因导致数据库发生故障,如硬盘损坏,那么所有提交的数据可能都会丢失。让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.2 事务的提交事务的提交 在数据库中事务中的提交操作需要用户进行确认,当用户确认提交后,事务中的操作才会执行成功,这个过程就是手动提交的过程。 为了说明事务的提交方式为手动提交,接下来,在例6-1的基础上进行操作,开启一个事务,使用UPDATE

8、语句实现由b账户向a账户转100元钱的转账功能,具体操作如下:让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.2 事务的提交事务的提交 (1)执行转账语句,不提交事务START TRANSACTION;UPDATE account SET money=money+100 WHERE name=a;UPDATE account SET money=money-100 WHERE name=b;开启事务b账户向a账户转账100元让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.2 事务的提交事务的提交 (1)执行转账语句,不提交事务 上述语句执行成功后,使用SELECT语句来

9、查询account表中的余额,查询结果如下:mysql SELECT * FROM account;+-+-+-+| id | name | money |+-+-+-+| 1 | a | 1000 | 2 | b | 1000 |+-+-+-+2 rows in set (0.00 sec)在事务中实现了转账功能让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.2 事务的提交事务的提交 (1)执行转账语句,不提交事务 此时,退出数据库然后重新登录,并查询数据库中各账户的余额信息,查询结果如下:mysql SELECT * FROM account;+-+-+-+| id | nam

10、e | money |+-+-+-+| 1 | a | 900 | 2 | b | 1100 |+-+-+-+2 rows in set (0.00 sec)事务中的转账操作没有成功 结论:在事务中转账成功后没有提交事务就退出了数据库,由于事务中的语句不能自动提交,因此当前的操作会被自动取消。让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.2 事务的提交事务的提交 (2)执行转账语句,提交事务START TRANSACTION;UPDATE account SET money=money+100 WHERE name=a;UPDATE account SET money=money

11、-100 WHERE name=b;COMMIT;开启事务b账户向a账户转账100元commit语句用来提交事务让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.2 事务的提交事务的提交 (2)执行转账语句,提交事务 上述语句执行成功后,退出数据库然后再重新登录,使用SELECT语句查询数据库中各账户的余额信息,查询结果如下:mysql SELECT * FROM account;+-+-+-+| id | name | money |+-+-+-+| 1 | a | 1000 | 2 | b | 1000 |+-+-+-+2 rows in set (0.00 sec)实现了转账功

12、能 结论:事务中的操作都是手动提交的,因此在操作完事务时,一定要使用COMMIT语句提交事务,否则事务操作会失败。让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.3 事务的回滚事务的回滚 在操作一个事务时,如果发现当前事务中的操作是不合理的,此时只要还没有提交事务,就可以通过回滚来取消当前事务。 为了演示事务的回滚操作,在6.1.2小节的基础上进行操作,这时的a账户有1000元,b账户有1000元,开启一个事务,通过update语句将a账户的100元钱转给b账户,具体语句如下:START TRANSACTION;UPDATE account SET money=money-100

13、WHERE name=a;UPDATE account SET money=money+100 WHERE name=b;开启事务a账户向b账户转账100元让IT教学更简单,让IT学习更有效6.1 事务管理 6.1.3 事务的回滚事务的回滚 上述语句执行成功后,使用SELECT语句查询A账户和B账户的金额,查询结果如下:mysql SELECT * FROM account;+-+-+-+| id | name | money |+-+-+-+| 1 | a | 900 | 2 | b | 1100 |+-+-+-+2 rows in set (0.00 sec)转账操作成功让IT教学更简单,

14、让IT学习更有效6.1 事务管理 6.1.3 事务的回滚事务的回滚 从上述结果可以看出,a账户成功给b账户转账100元钱,如果此时a账户不想给b账户转账了,由于事务还没有提交,就可以将事务回滚,具体语句如下: ROLLBACK语句执行成功后,再次使用SELECT语句查询数据库,查询结果如下:ROLLBACK;mysql SELECT * FROM account;+-+-+-+| id | name | money |+-+-+-+| 1 | a | 1000 | 2 | b | 1000 |+-+-+-+2 rows in set (0.00 sec)回滚操作成功,当前事务中的操作取消了让I

15、T教学更简单,让IT学习更有效6.1 事务管理 6.1.4 事务的隔离级别事务的隔离级别 数据库是多线程并发访问的,所以很容易出现多个线程同时开启事务的情况,这样就会出现脏读、重复读以及幻读的情况,为了避免这种情况的发生,就需要为事务设置隔离级别。 在MySQL中,事务有四种隔离级别,接下来将针对这四种隔离级别进行详细地讲解。 (1)READ UNCOMMITTED(读未提交) (2)READ COMMITTED(读提交) (3)REPEATABLE READ(可重复读) (4)SERIALIZABLE(可串行化)让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.1 创建存储过

16、程创建存储过程 创建存储过程,需要使用CREATE PROCEDURE语句,创建存储过程的基本语法格式如下:CREATE PROCEDURE sp_name(proc_parameter)characteristicsroutine_bodyCREATE PROCEDURE为用来创建存储过程的关键字sp_name为存储过程的名称proc_parameter为指定存储过程的参数列表characteristics用于指定存储过程的特性routime_body是SQL代码的内容,可以用BEGINEND来表示SQL代码的开始和结束让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.1 创

17、建存储过程创建存储过程 proc_parameter为指定存储过程的参数列表,它的参数列表的形式如下: type表示的参数类型,可以是MySQL数据库中的任意类型。IN|OUT|INOUTparam_name type输入参数输出参数输入输出参数参数名称参数的类型让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.1 创建存储过程创建存储过程 characteristics用于指定存储过程的特性,它的取值说明具体如下: (1)LANGUAGE SQL:说明routine_body部分是由SQL语句组成的,当前系统支持的语言为SQL,SQL是LANGUAGE的唯一值。 (2)NOT

18、DETERMINISTIC:指明存储过程执行的结果是否正确。DETERMINISTIC表示结果是正确的,NOT DETERMINISTIC表示结果是不确定的。如果没有指定任意一个值,默认为NOT DETERMINISTIC。 (3)CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA:指明子程序使用SQL语句的限制。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.1 创建存储过程创建存储过程 characteristics用于指定存储过程的特性,它的取值说明具体如下: (4)SQL SECURITYDEFINER|INVOK

19、ER:指明谁有权限来执行。DEFINER表示只有定义者才能执行。INCOKER表示拥有权限的调用者可以执行。默认情况下,系统指定为DEFINER。 (5)COMMENTstring:注释信息,可以用来描述存储过程。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.1 创建存储过程创建存储过程 接下来通过一个案例演示一下存储过程的创建,首先在数据库chapter06中创建表student,创建student表的SQL语句如下所示:建表语句让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.1 创建存储过程创建存储过程 然后使用INSERT语句向student表中插入

20、4条记录,INSERT语句如下所示:让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.1 创建存储过程创建存储过程 【例6-2】创建一个查看student表的存储过程,其创建语句如下: 上述代码创建了一个存储过程Proc,每次调用这个存储过程的时候都会执行SELECT语句查看表的内容,代码的执行过程如下:将将MySQL的结束符设置为的结束符设置为/让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.2 变量的使用变量的使用 在MySQL中,变量可以在子程序中声明并使用,这些变量的作用范围是在BEGINEND程序中。 在存储过程中使用DECLARE语句定义变量,具体

21、语法格式如下: 上述语法格式中,var_name为局部变量的名称。DEFAULT value子句给变量提供一个默认值。该值除了可以被声明为一个常数之外,还可以被指定为一个表达式。如果没有DEFAULT子句,变量的初始值为NULL。DECLARE var_name,varnamedate_typeDEFAULT value;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.2 变量的使用变量的使用 定义一个名称为myvariable的变量,类型为INT类型,默认值为100,示例代码如下: 定义变量之后,为变量赋值可以改变变量的默认值,MySQL中使用SET语句为变量赋值,语法格式

22、如下:DECLARE myvariable INT DEFAULT 100;SET var_name = expr,var_name = expr;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.2 变量的使用变量的使用 声明3个变量,分别为var1、var2、var3,数据类型为INT,使用SET为变量赋值,示例代码如下:DECLARE var1,var2,var3 INT;SET var1=10,var2=20;SET var3=var1+var2;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.2 变量的使用变量的使用 除了可以使用SET语句为变量赋值

23、外,MySQL中还可以通过SELECTINTO为一个或多个变量赋值,该语句可以把选定的列直接存储到对应位置的变量。 使用SELECTINTO的具体语法格式如下: 在上述语法格式中,col_name表示字段名称;var_name表示定义的变量名称;table_expr表示查询条件表达式,包括表名称和WHERE子句。SELECT col_name INTO var_name table_expr;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.2 变量的使用变量的使用 【例6-3】声明变量s_grade和s_gender,通过SELECTINTO语句查询指定记录并为变量赋值,具体

24、代码如下: 上述语句将student表中name为rose的同学的成绩和性别分别存入到了变量s_grade和s_gender中。DECLARE s_grade FLOAT;DECLARE s_gender CHAR(2);SELECT grade, gender INTO s_grade, s_genderFROM student WHERE name = rose;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.3 定义条件和处理程序定义条件和处理程序 定义条件是事先定义程序执行过程中遇到的问题,处理程序定义了在遇到这些问题时应当采取的处理方式,并且保证存储过程在遇到警告或

25、错误时能继续执行。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.3 定义条件和处理程序定义条件和处理程序 1、定义条件 在编写存储过程时,定义条件使用DECLARE语句,语法格式如下:DECLARE condition_name CONDITION FOR condition_type;/ condition_type的两种形式:condition_type:SQLSTATEVALUE sqlstate_value|mysql_error_codecondition_name表示所定义的条件的名称;condition_type表示条件的类型;sqlstate_value和m

26、ysql_error_code都可以表示MySQL的错误,sqlstate_value是长度为5的字符串类型错误代码,mysql_error_code为数值类型的错误代码。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.3 定义条件和处理程序定义条件和处理程序 【例6-4】定义“ERROR1148(42000)”错误,名称为command_not_allowed。可以用两种不同的方法类来定义,具体代码如下:/方法一:使用sqlstate_valueDECLARE command_not_allowed CONDITION FOR SQLSTATE42000;/方法二:使用my

27、sql_error_codeDECLARE command_not_allowed CONDITION FOR 1148;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.3 定义条件和处理程序定义条件和处理程序 2、定义处理程序 MySQL书用DECLARE语句定义处理程序,具体语法格式如下:DECLARE handler_type HANDLER FOR condition_value, sp_statementhandler_type:CONTINUE|EXIT|UNDOcondition_value:|condition_name|SQLWARNING|NOT FOUN

28、D|SQLEXCEPTION|mysql_error_codehandler_type为错误处理方式,参数取3个值:CONTINUE、EXIT和UNDO。CONTINUE表示遇到错误不处理,继续执行;EXIT遇到错误马上退出;UNDO表示遇到错误后撤回之前的操作,MySQL中暂时不支持这样的操作。sp_statement参数为程序语句段,表示在遇到定义的错误时,需要执行的存储过程;condition_value表示错误类型。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.3 定义条件和处理程序定义条件和处理程序 2、定义处理程序 condition_value表示错误类型,可

29、以有以下取值: SQLSTATEVALUE sqlstate_value 包含5个字符的字符串错误值。 condition_name表示DECLARE CONDITION 定义的错误条件名称。 SQLWARNING匹配所有以01开头的SQLSTATE错误代码。 NOT FOUND匹配所有以02开头的SQLSTATE错误代码。 SQLEXCEPTION匹配所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE错误代码。 mysql_error_code匹配数值类型错误代码。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.3 定义条件和处理程序定义条件和处理程序

30、 【例6-5】定义处理程序的几种方式,具体代码如下:第一种方法是捕获sqlstate_value值。如果遇到sqlstate_value值为“42S02”,则执行CONTINUE操作,并且输出“NO_SUCH_TABLE” 信息。第二种方法是捕获mysql_error_code值,如果遇到mysql_error_code值为1146,则执行CONTINUE操作,并且输出“NO_SUCH_TABLE” 信息。第三种方法是先定义条件,然后再调用条件。这里先定义no_such_table条件,遇到1146错误就执行CONTINUE操作。第四种方法是使用SQLWARNING,SQLWARNING捕获所

31、有以01开头的sqlstate_value值,然后执行EXIT操作,并且输出“ERROR”信息。第五种方法是使用NOT FOUND, NOT FOUND捕获所有以02开头的sqlstate_value值,然后执行EXIT操作,并且输出“NO_SUCH_TABLE”信息。第六种方法是使用SQLEXCEPTION,SQLEXCEPTION捕获所有没有被SQLWARNING或NOT FOUND捕获的sqlstate_value值,然后执行EXIT操作,并且输出“ERROR”信息。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.3 定义条件和处理程序定义条件和处理程序 接下来,通过一

32、个案例来演示如何定义条件和处理程序,如例6-6所示。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.4 光标的使用光标的使用 在编写存储过程时,查询语句可能会返回多条记录,如果数据量非常大,则需要使用光标来逐条读取查询结果集中的记录。光标是一种用于轻松处理多行数据的机制。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.4 光标的使用光标的使用 1、光标的声明 光标必须声明在声明变量、条件之后,声明处理程序之前。 MySQL中使用DECLARE关键字来声明光标,声明光标的具体语法格式如下:DECLARE cursor_name CURSOR FOR selec

33、t_statement 接下来声明一个名为cursor _student的光标,示例代码如下:DECLARE cursor_student CURSOR FOR select s_name,s_gender FROM student;cursor_name表示光标的名称;select_statement表示SELECT语句的内容,返回一个用于创建光标的结果集。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.4 光标的使用光标的使用 2、光标的使用 MySQL中打开和使用光标的语法格式如下:OPEN cursor_nameFETCH cursor_name INTO var_n

34、ame,var_namecursor_name表示参数的名称;var_name表示将光标中的SELECT语句查询出来的信息存入该参数中。 需要注意的是,var_name必须在声明光标之前就定义好。 使用名称为cursor_student的光标。将查询出来的信息存入s_name和s_ gender中,示例代码如下:FETCH cursor_student INTO s_name, s_gender;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.4 光标的使用光标的使用 3、光标的关闭 关闭光标的语法格式如下: 值得一提的是,如果没有明确的关闭光标,它会在其声明的复合语句的末尾

35、被关闭。CLOSE cursor_name让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 流程控制语句用于将多个SQL语句划分或组合成符合业务逻辑的代码块。 MySQL中的流程控制语句包括:IF语句、CASE语句、LOOP语句、WHILE语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 1、IF语句 IF语句是指如果满足某种条件,就根据判断的结果为TRUE或FALSE执行相应的语句,其语法格式如下:IF expr_co

36、ndition THEN statement_list ELSEIF expr_condition THEN statement_list ELSE statement_listEND IFexpr_condition表示判断条件,statement_list表示SQL语句列表,它可以包括一个或多个语句。如果expr_condition求值为TRUE,相应的SQL语句列表就会被执行;如果没有expr_condition匹配,则ELSE子句里的语句列表被执行。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 1、IF语句 接下来演示一下IF语句的

37、用法,示例代码如下:IF val IS NULLTHEN SELECT val is NULL;ELSE SELECT val is not NULL;END IF;上述代码中,判断val值是否为空,如果val值为空,输出字符串“val is NULL”;否则输出字符串“val is not NULL”。需要注意的是,IF语句都需要使用END IF来结束,不可省略。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 2、CASE语句 CASE是另一个进行条件判断的语句,该语句有两种语句格式,第一种格式如下:CASE case_exprWHEN w

38、hen_value THEN statement_listWHEN when_value THEN statement_listELSE statement_listEND CASE在上述语法格式中,case_expr表示条件判断的表达式,决定了哪一个WHEN子句会被执行;when_value表示表达式可能的值,如果某个when_value表达式与case_expr表达式结果相同,则执行对应THEN关键字后的statement_list中的语句,statement_list表示不同when_value值的执行语句。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的

39、使用流程控制的使用 【例6-7】使用CASE流程控制语句的第一种格式,判断val值等于1、等于2,或者两者都不等,语句如下: 在上述代码中,当val值为1,输出字符串”val is 1”;当val值为2时,输出字符串“val is 2”;否则输出字符串“val is not 1 or 2”。CASE valWHEN 1 THEN SELECT val is 1;WHEN 2 THEN SELECT val is 2;ELSE SELECT val is not 1or 2;END CASE;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 2、

40、CASE语句 CASE语句的第二种格式如下: 需要注意的是,这里讲解的用在存储过程里的CASE语句与“控制流程函数”里描述的SQL CASE表达式CASE语句有些不同。存储过程里的CASE语句不能有ELSE NULL子句,并且用END CASE替代END来终止。CASEWHEN expr_condition THEN statement_listWHEN expr_condition THEN statement_listELSE statement_listEND CASE;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 3、LOOP语句

41、LOOP循环语句用来重复执行某些语句,与IF和CASE语句相比,LOOP只是创建一个循环操作的过程,并不进行条件判断。LOOP内的语句一直重复执行直到跳出循环语句。 LOOP语句的基本格式如下:loop_label:LOOPstatement_listEND LOOP loop_label上述语法格式中,loop_label表示LOOP语句的标注名称,该参数可以省略;statement_list表示需要循环执行的语句。让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 【例6-8】使用LOOP语句进行循环操作,具体代码如下: 例中,循环执行了id

42、加1的操作。当id值小于10时,循环重复执行;当id值大于或者等于10时,使用LEAVE语句退出循环。DECLARE id INT DEFAULT 0;add_loop:LOOPSET id=id+1;IF id=10 THEN LEAVE add_loop;END IF;END LOOP add_loop;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 4、LEAVE语句 LEAVE语句用于退出任何被标注的流程控制构造。 LEAVE语句基本语法格式如下: 在上述语法结构中,label表示循环的标志。通常情况下,LEAVE语句与BEGINEN

43、D、循环语句一起使用。LEAVE lable让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 5、ITERATE语句 ITERATE的意思是再次循环,ITERATE语句用于将执行顺序转到语句段的开头处。 ITERATE语句的基本语法格式如下: 需要注意的是,ITERATE语句只可以出现在LOOP、REPEAT和WHILE语句内。ITERATE lable让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 【例6-9】演示了ITERATE语句在LOOP语句内的使用,具体代码如下:CREATE PRO

44、CEDURE doiterate()BEGIN DECLARE p1 INT DEFAULT 0;my_loop:LOOPSET p1=p1+1;IF p120 THEN LEAVE my_loop;END IF;SELECT p1 is between 10 and 20;END LOOP my_loop;END让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 6、REPEAT语句 REPEAT语句用于创建一个带有条件判断的循环过程,每次语句执行完毕之后,会对条件表达式进行判断,如果表达式为真,则循环结束;否则重复执行循环中的语句。 REPE

45、AT语句的基本语法格式如下:repeat_lable: REPEATstatement_listUNTIL expr_conditionEND REPEATrepeat_lable让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 【例6-10】演示使用REPEAT语句执行循环过程,具体代码如下:DECLARE id INT DEFAULT 0;REPEATSET id=id+1;UNTIL id=10;END REPEAT;让IT教学更简单,让IT学习更有效6.2 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 7、WHILE语句 W

46、HILE语句创建一个带条件判断的循环过程,与REPEAT不同的是,WHILE在语句执行时,先对指定的表达式进行判断,如果为真,则执行循环内的语句,否则退出循环。 REPEAT语句的基本语法格式如下:while_lable: WHILE expr_condition DOStatement_listEND WHILE while_lable在上述语法格式中,while_lable为WHILE语句的标注名称;expr_condition为进行判断的表达式,如果表达式结果为真,WHILE语句内的语句或语句群被执行,直至expr_condition为假,退出循环让IT教学更简单,让IT学习更有效6.2

47、 存储过程的创建 6.2.5 流程控制的使用流程控制的使用 【例6-11】演示了使用WHILE语句进行循环操作,具体代码如下:DECLARE i INT DEFAULT 0;WHILE i 10 DOSET i=i+1;END WHILE;让IT教学更简单,让IT学习更有效6.3 存储过程的使用 6.3.1 调用存储过程调用存储过程 存储过程必须使用CALL语句调用,并且存储过程和数据库相关,如果要执行其他数据库中的存储过程,需要指定数据库名称。 调用存储过程的语法格式如下: 上述语法格式中,sp_name为存储过程的名称,parameter为存储过程的参数。CALL sp_name(para

48、meter,)让IT教学更简单,让IT学习更有效6.3 存储过程的使用 6.3.1 调用存储过程调用存储过程 【例6-12】定义一个名为CountProc1的存储过程,然后调用这个存储过程,具体操作如下: 1、定义存储过程: 2、调用存储过程:让IT教学更简单,让IT学习更有效6.3 存储过程的使用 6.3.1 调用存储过程调用存储过程 3、查看返回结果:让IT教学更简单,让IT学习更有效6.3 存储过程的使用 6.3.2 查看存储过程查看存储过程 1、SHOW STATUS语句查看存储过程的状态 使用SHOW STATUS语句查看,基本语法结构如下: 上述语法格式中,PROCEDURE和FU

49、NCTION分别表示查看存储过程和函数,LIKE语句表示匹配的名称。CALL sp_name(parameter,)让IT教学更简单,让IT学习更有效6.3 存储过程的使用 6.3.2 查看存储过程查看存储过程 【例6-13】SHOW STATUS 语句的示例代码如下: 代码执行如下: SHOW PROCEDURE STATUS LIKEC%G让IT教学更简单,让IT学习更有效6.3 存储过程的使用 6.3.2 查看存储过程查看存储过程 2、SHOW CREATE语句查看存储过程的状态 使用SHOW CREATE语句查看,基本语法格式如下:SHOW CREATEPROCEDURE|FUNCTION sp_name让IT教学更简单,让IT学习更有效6.3 存储过程的使用 6.3.2 查看存储过程查看存储过程 【例6-14】SHOW CREATE 语句的示例代码如下: 代码执行如下:SHOW CREATE PROCEDURE chapter06.CountProc1G让IT教学更简单,让IT学习更有效6.3 存储过程的使用 6.3.2 查看存储过程查看存储过程 3、从information_schema.Routines表中查看存储过程的信息 在MySQL中存储过程和函数的

温馨提示

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

评论

0/150

提交评论