77范文网 - 专业文章范例文档资料分享平台

计算机二级MySQL基本知识点(7)

来源:网络收集 时间:2019-04-10 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

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 注意:这里的SELECT语句不能有INTO语句。 ②打开游标:OPEN<游标名>

③读取数据: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)在线全文阅读。

计算机二级MySQL基本知识点(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/584083.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: