B.SET GLOBAL EVENT_SCHEDULER=1;
C.SELECT @@EVENT_SCHEDULER;——这个是查看事件调动器的状态。 还有一种查看方式是:mysql>show variables like 'event_scheduler'; D.SET GLOBAL EVENT_SCHEDULER=ON;
※存储过程:一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过制定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 存储过程具有以下优点:
①封装性;②可增强SQL语句的功能和灵活性; ③可减少网络流量; ④高性能;
⑤提高数据库的安全性和数据的完整性。
※创建存储过程:CREATE PROCEDURE语句。
CREATE PROCEDURE <过程名>(过程参数[,??])<过程体> [过程参数[??]].格式:[IN|OUT|INOUT]<参数名><类型> 过程名:存储过程的名称;
输入参数IN:传递给一个存储过程;
输出参数OUT:存储过程需要返回一个操作结果的情形;
输入输出参数INOUT:既可以充当输入参数也可以充当一个输出参数。
过程体;以关键字BEGIN开始,以END结束。若存储过程只有一条SQL语句,则可以省略此过程。
※存储过程中通常使用DELIMITER命令将结束命令修改成其他符号(而不是“;”) 语法格式:DELIMITER $$
其中$$是用户定义的结束符,通常这个符号可以是一些特殊的符号,比如两个“?”或者两个“¥”等。
注意:当使用DELIMITER命令时,应避免使用反斜杠(“\\”),因为它是MySQL的转义字符。
例1:将MySQL结束符修改为两个问号“??”.利用该结束符来作为show databases语句的结束符。
Mysql>delimiter ?? ——这里的??和delimiter 是由一个空格的。
mysql> show databases??——这里就不需要空格,因为已经作为定义好的结束符。 +--------------------+
| Database | +--------------------+ | information_schema | | db_emp | | mysql | | mytest | | performance_schema | | test | +--------------------+
例2:换回默认的分号“;”作为结束符。 Mysql>delimiter ;
注意:此处的delimiter 和“;”应该要有个空格.
例3:在数据库mytest中创建一个存储过程,存储过程的功能是修改表students的姓名。要求给出学生的id,修改对应的姓名。 MySQL>use mytest; Mysql>delimiter ??
mysql->create procedure update_name(in cid int,in cname char(50))
->begin
->update mytest.students set student_name=cname when student_id=cid; ->end??
注意:可以使用show procedure status 命令,查看数据库中有哪些存储过程;若要查看某个存储过程的具体信息,可以使用show create procedure<存储过程名>。 当要查看数据库mytest中有哪些存储过程时: Mysql>delimiter ;
Mytest>show procedure status;
当要查看数据库mytest中的存储过程update_name时: Mysql>show create procedure mytest.update_name;
局部过程体中可以声明局部变量,用来存放产生的临时结果。 ※局部变量:与全局变量相对应,在局部范围内有效的变量; 声明局部变量的语法格式:
DECLARE <变量名>[,......]<类型>[DEFAULT<默认值>]
例4:声明一个字符型局部变量xname,默认值为“李晓明”。 在存储过程中输入以下语句:
Declare xname varchar(5) default '李晓明'; ※局部变量和用户变量的使用范围:
①局部变量只能在存储过程BEGIN?END语句中声明,且作用范围也只在BEGIN?END之间;
②局部变量必须在存储过程开头处说明;
③局部变量声明时没有使用@符号,并且只能在BEGIN?END范围内使用,用户变量在声明时,需要使用@符,已经声明的用户变量存在于整个会话中。
※SET语句:变量声明以后,可以用SET语句为局部变量赋值。 语法格式为:
SET <变量名1>=<表达式1>??<变量名2>=<表达式2> 例5:为例4的变量赋值为“王杰”。 在存储过程中输入以下语句: Set xname='王杰'
※SELECT......INTO语句:把选定列的值直接存储到局部变量中,存储过程体中的SELECT......INTO只能返回一行数据。 语法格式:
SELECT <列名>[......]INTO<变量名>[,......]<其他>
<其他>:SELECT语句中的FROM子句以及后面的语法部分。
例6:给局部变量x,y分别赋数据库mytest中的表t1的id,data列的值。
在存储过程中输入以下语句:
Select id,data into x,y from mytest.t1 limit 1;
Limit1 的意思:当没有指定位置偏移量时,只取1条结果。
※流程控制语句:
①条件判断句IF-THEN-ELSE 语法格式:
IF<判断语句>THEN <语句>
[ELSEIF<判断条件>THEN<语句>] [ELSE<语句>] END IF
②条件判断句CASE CASE<参数>
WHEN<参数>THEN<语句> [WHEN<参数>THEN<语句>]. [ELSE语句] END CASE 或
CASE<参数>
WHEN<参数>THEN<语句>
[WHEN<参数>THEN<语句>ELSE语句] END CASE
③循环语句LOOP <标签>LOOP <语句>
END LOOP[标签]
循环体中的语句会一直被重复执行,直至循环使用LEAVE语句退出。其中,LEAVE语句的语法格式为:LEAVE<标签>,这里的标签是LOOP语句中所标注的自定义名字。 ④循环语句WHILE
<标签>WHILE<判断条件>DO <语句>
END WHILE<标签> ⑤循环语句REPEAT <标签>REPEAT <语句>
UNTIL<判断条件> END REPEAT<标签>
REPEAT语句和WHILE语句的区别:REPEAT语句先执行语句,后进行判断;而WHILE语句时先判断,条件为真时才执行语句。
※游标:游标是一个被SELECT语句检索出来的结果集。在存储了游标以后,应用程序或用户可以根据需要滚动或浏览其中的数据。 注意:
①游标只能用于存储过程或者存储函数中,不能单独在查询操作中使用。
②在存储过程或者存储函数中可以定义多个游标,但是在一个BEGIN......END语句块中每一个游标的名字必须是唯一的。
※使用游标的步骤:
①声明游标:DECLARE<游标名>CURSOR FOR
③读取数据:FETCH<游标名>INTO<变量名1>[,变量名2]... ④关闭游标:CLOSE<游标名>
注意:每个游标不再使用时都应该被关闭,关闭后才能释放出游标所使用的资源。同时,在游标被关闭后,需要重新打开才能使用。系统会在END语句结束后,自动关闭没有手工关闭的游标。 例7:在数据库mytest中创建一个存储过程sp_count,用于统计表students中的记录总行数。首先,在MySQL中输入以下语句创建存储过程: mysql>use mytest; Mysql>delimiter ??
Mysql>create procedure sp_count(out rows int)
/*此处是输出参数,将统计结果输出,参数名为rows*/
->begin
->select count(*) into rows from mytest.students; ->end??
接着我们调用编写好的存储过程: mysql>delimiter ;
Mysql>call sp_count(@rows);
调用存储过程有一个目的就是恢复结束符标志位“;” 调用过程中变量要加\
※调用存储过程——CALL语句。 CALL<过程名>[参数] CALL<过程名>[()]
例8:调用例3编写的存储过程update_name,将student_id=1320的学生的姓名改为“张泽志”。
Mysql>call update_name(1320,'张泽志');
※修改存储过程:ALTER PROCEDURE<过程名>[<特征>......] 这个语法用于修改存储过程中的某些特征,如若要修改存储过程中的内容,可以先删除该存储过程,然后再重新创建。
※删除存储过程:DROP {PROCEDURE|FUNCTION}[IF EXISTS]<过程名> 删除之前,必须确认存储过程没有任何依赖关系,否则会导致其他与之关联的存储过程无法运行。
例9:删除数据库mytest中的存储过程update_name。
Mysql>drop procedure mytest.update_name; (×) 存储过程不能当做表来操作 Mysql>drop procedure update_name; (√)
※存储函数:由SQL语句和过程式语句组成的代码片段,并且可以被应用程序和其他SQL语句调用。
※存储函数和存储过程的区别: ①存储函数不能有输出参数,因为存储函数自身就是输出参数;而存储过程可以拥有输出参数;
②存储函数必须包含一条RETURN语句,而这条特殊的SQL语句不允许包含于存储过程中。可以理解为:存储函数自身是输出参数所以需要RETURN回来。
③可以直接对存储函数进行调用而不需要CALL语句,而对存储过程的调用则需要使用CALL语句。
※创建存储函数:
CREATE FUNCTION <函数名>([<参数1>,<类型1>[,<参数2>,<类型2>]]......) RETURNS<类型> <函数主体>
其中,<参数><类型>:用于指定存储函数的参数。这里的参数只有名称和类型,不能指定关键字IN,OUT,INOUT。
RETURNS:用于声明存储函数返回值的数据类型。
<函数体>:存储函数体必须包含一个RETURN<值>语句,其中<值>用于指定存储函数的返回值。
例10:在数据库mytest中创建一个存储函数fn_search,函数功能是:根据给定的student_id查找学生并返回该学生的姓名,如果没有查找到相应的学生,则返回‘没有该学生信息’。 Mysql>use mytest; Mysql>delimiter ??
Mysql>create function fn_search(cid int)
/*存储函数不包含输出参数,所以这里主要是输入学号,输出姓名,所以只需要写输入参数学号即可*/
->returns char(50)
->deterministic /*确定性的*/ ->begin
->declare name char(50);
->select student_name into name from mytest.students where student_id=cid; ->if name is null then
->return(select ('没有该学生的信息')); /*SELECT里面也要有括号()*/ ->else
->return (name); ->end if; ->end??
注意:在begin 和end中间函数体的“;”一定要有,否则程序出错。 加“;”的方法:每一种结构结束后要加“;” 比如declare声明变量结束后要加; Select语句结束后要加;
Return返回结果的时候也要加;if......end if结构结束后要加。
※使用SELECT关键字调用存储函数。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机二级MySQL基本知识点(7)在线全文阅读。
相关推荐: