一,存储函数的创建,调用,查看,修改,删除

1,创建存储函数drop function if exists func_name;     #如果存储函数存在,删除存储函数delimiter //                           #声明存储函数的结束符为//,可自定义create function func_name([func_parameter])returns type                       #函数返回的数据类型[characteristic ...]               #存储函数特性,创建时一般省略,默认系统设置begin                              #程序主体开始#中间可写逻辑,包括定义变量,变量赋值,定义条件及处理程序,定义光标及流程控制return  value;                     #存储函数可以通过 return 语句返回函数值,主要用于计算并返回一个值,可以是一个查询结果值end//                              #程序结束标识符delimiter;'''1, func_parameter    #指定存储函数的参数列表,如下:in | out | inout  param_name  type    #in,out,inout 输入输出,param_name 字段名  type 字段类型但是,存储函数默认为in,且参数不写in  没有out,inout 2, DELIMITER//和DELIMITER;两句, DELIMITER是分割符的意思,因为MySQL默认以";"为分隔 符,如果我们没有声明分割符,那么编译器会把存储函数当成SQL语句进行处理,则存储函数的编译过程会报错,所以要事先用DELIMITER关键字申明当 前段分隔符,这样MySQL才会将";"当做存储函数中的代码,不会执行这些代码,用完了之后要把分隔符还原。   3,存储函数的特性  characteristic:COMMENT 'string'       表示注释信息| LANGUAGE SQL           当前系统支持的语言为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: 子程序包含写数据的语句| SQL SECURITY { DEFINER | INVOKER }  指明谁有权限执行存储函数  DEFINER 只有定义者才能执行  INVOKER 有权限的调用者可执行4,程序主体可以用begin开始,end结束,return返回'''#简单的例字drop function if exists id;delimiter //create function id(re_name varchar(20))returns  int(20)begindeclare  itep int(20);                                                #定义变量declare not_found condition for 1146;                                 #定义条件declare exit handler for not_found set @info='no_such_table';         #定义处理程序select id into itep from sch where name =re_name;                     #变量赋值return itep;                                                          #返回end//delimiter;                                                                    #恢复结束符2,调用存储函数select id('xiaojun');                #select 调用存储函数的关键字   add_id   存储函数名称'''注意事项:1)存储函数名称后面必须加括号,哪怕该存储函数没有参数传递'''3,查看存储函数show  function status  like 'i%';   #1)查看以字母i开头的存储函数状态  \G 有序的展示show  create function  id ;     #2)查看存储函数的定义#3)从information_schema.routines 表中查看存储函数  创建的所有存储函数都存在information_schema库下的routines表select * from information_schema.routines  where routine_name = 'id' and routine_type = 'function' ;4,修改存储函数alter function idmodifies sql data           #权限修改为MODIFIES SQL DATAsql security invoker;       #安全类型改为INVOKERselect * from information_schema.routines  where routine_name = 'id' and routine_type = 'function' ;4,删除存储函数drop function if exists id;

二,变量(和存储过程一样)

1,定义变量(局部变量)declare  var_name[,varname] type [default value];'''1)declare    声明,定义变量的关键字2)var_name   变量名称3)type       变量类型4)default value    默认值,没有默认NULL    '''declare var1 int;declare var2 int default 100;2,局部变量赋值set var_name = expr[,varname=expr...] ;                  #set 方式赋值select col_name[,...] into var_name[,...] table_expr;    #select ... into  方式赋值'''1)var_name  col_name 变量名2)expr               变量值3)table_expr         查询条件表达式'''set var1=1,var2=2;select id,name into var1,var2 from test1 where id = 101;3,设置临时变量并赋值(用户变量)set @a = 100select id into @id from test1 where id = 1;4,查询变量select @a,@var1,@var2,@id;5,变量的应用及作用域1)在mysql客户端使用临时变量(用户变量)SELECT 'Hello World' into @x;SELECT @x;SET @y='Goodbye my girl';select @y;SET @z=10+20+30;select @z;2)在存储函数中使用临时变量(用户变量)CREATE function mygirl( )returns varchar(200)beginSET @var='Hello';SELECT CONCAT(@var,' mygirl') into  @var;return @var;end;select mygirl( );3)在存储函数间传递全局范围的临时变量(用户变量)CREATE function p1( )returns varchar(200)beginSET @last_function='p1';return @last_function;end;CREATE function p2( )returns varchar(200)beginreturn (concat('Last function was ',' ',(select p1())));end;select p1();select p2();4)变量的作用域'''局部变量/临时变量在其作用域范围内(begin  end)代码块之间有效,当执行到end变量时,局部变量/临时变量失效,此时已经在其作用域外。'''

三,定义条件及处理程序(和存储过程一样)

1,定义条件declare condition_name condition for [condition_type];'''1)condition_name   条件名称,可用于处理程序时应用2)condition_type   条件类型,有如下类型:sqlstate  sqlstate_value      长度为5的字符串类型错误代码mysql_error_code    数值类型错误代码       '''eg: 定义“ERROR 1148 (42000): The used command is not allowed with this MySQL version”错误有如下定义方法:declare command_not_allowed condition for sqlstate '42000';    #使用sqlstate_value 定义declare command_not_allowed condition for 1148;                #使用mysql_error_code 定义
2,定义处理程序declare handler_type handler for condition_value sp_statement;'''1)handler_type         错误处理方式continue (继续)| exit (退出)|undo (撤回,暂不支持)2)condition_value      错误类型sqlstate_value      长度为5的字符串类型错误代码mysql_error_code    数值类型错误代码condition_name      自定义的条件名称sqlwarning          匹配所有以01开头的sqlstate错误代码not found           匹配所有以02开头的sqlstate错误代码sqlexception        匹配没有被sqlwarning,not found捕获的sqlstate错误代码        3)sp_statement         遇到定义的错误时,需要执行的存储过程或函数'''eg: 定义“ERROR 1146 (42S02):Table doesn’t exist” 处理程序有如下方法:declare continue handler for sqlstate '42S02' set @info='no_such_table';    #捕获sqlstate_valuedeclare continue handler for 1146  set @info='no_such_table';               #捕获mysql_error_codedeclare no_such_table condition for 1146;declare continue handler for no_such_table set @info='no_such_table';       #先定义条件,后调用declare exit handler for sqlwarning set @info='error';                      #使用sqlwarningdeclare exit handler for not found  set @info='no_such_table';              #使用not founddeclare exit handler for sqlexception set @info='error';                    #使用sqlexception

四,光标(和存储过程一样)

'''
1)cursor_name          光标名称
2)select_statement     查询结果集
3)var_name             声明光标前定义好的局部变量,用于存储select_statement的结果集
4)光标只能在存储过程或函数中使用
'''
1,声明光标declare cursor_name cursor for select_statement;
2,打开光标open cursor_name;
3,使用光标fetch cursor_name into var_name[,varname...];
4,关闭光标close  cursor_name;

五,流程控制(和存储过程有差异)

1,if -then -else -end if条件语句if expr_condition then statement_list;elseif expr_condition then statement_list ...;else statement_list;end if;'''如果expr_condition为真,执行对应的statement_list,如果expr_condition为假,执行else'''drop function if exists boy;delimiter //create function boy(age int)returns varchar(20)beginif age>=0 and age<60then return'不及格';elseif age>=60 and age<80then return '一般';elseif age>=80 and age<=100then return '优秀';else return'数据异常';end if ;end//delimiter;select  boy(-10);select  boy(10);select  boy(70);select  boy(90);2,case -when -then -else -end case 条件语句1)case case_exrpwhen when_value then statement_list;when when_value1 then statement_list1;else statement_list;end case;'''1> case_exrp        条件判断表达式,决定执行那个when 子句,适合特定条件的判断2> when_value       表达式可能的值,如果与case_exrp 相同执行when子句,不同执行else 子句3> statement_list   不同when_value 值的执行语句'''drop function if exists person;delimiter //create function person(sex int)returns varchar(200)begincase sexwhen 0 then return '你是男孩';when 1 then return  '你是女孩';when 2 then return  '你是美人';else return  '你需要就医';end case ;end//delimiter;select person(0);select person(1);select person(2);select person(3);2) casewhen expr_condition then statement_list;when expr_condition1 then statement_list1;else statement_list;end case;'''1> expr_condition        条件判断语句,when 语句逐个执行,适合单边2> statement_list        执行语句,当expr_condition为真时执行对应的statement_list,都为假执行else 语句'''drop function if exists person2;delimiter //create function person2(age int)returns varchar(200)begincasewhen age<18 then return '你未成年';when age<40  then return '你很年轻';when age<60 then return '你是中年';when age<100  then return '你是老年';else return '你该休息了';end case ;end//delimiter;select  person2(10);select person2(30);select person2(70);select person2(120);3,loop  -end loop 循环语句 (循环不需要初始条件,也不需要结束条件,只循环不判断)loop_label:loop         #loop_label loop语句的标注名称,可省略statement_list;     #需要循环执行的语句,用leave 退出循环  leave loop_labelend loop loop_label;drop function if exists s1;delimiter //create function s1(a int)returns int(10)begindeclare cou int default 0;add_loop:loopset a=a+2;if a>10 then  leave add_loop;end if ;set cou=cou+1;end loop;return cou;end//delimiter;select s1(1);4,iterate  label, leave label 语句   出现在loop,repeat,while 语句内iterate label      #重复循环,执行到条件判断时,如果条件为真返回语句段开头处重复执行  label 循环标注leave   label      #退出循环,执行到条件判断时,如果条件为真退出循环  label 循环标注drop function if exists s2;delimiter //create function s2(a int)returns int(20)begindeclare cou int default 0;add_loop:loopset a=a+2;if a<=20 then iterate add_loop;    #a<=20时,重复执行a=a+2操作elseif a>50 then leave add_loop;   #a>50时,退出循环add_loopend if;set cou = cou + 1;end loop add_loop;return  cou;end//delimiter;select s2(0);5,repeat  -end repeat 语句  (带判断条件的循环语句,执行操作后判断)repeat_label:repeat             #repeat_label repeat语句的标注名称,可省略statement_list;             #需要循环执行的语句,每次循环后会判断expr_conditionuntil expr_condition            #expr_condition  判断表达式,为真时退出循环,否则重复循环end repeat repeat_label;drop function if exists g2;delimiter//create function g2(a int)returns int(20)begindeclare cou int default 0;add_repeat:repeatset a=a+2;set cou=cou+1;until a>50                   #每次循环后,判断该条件是否为真,为真退出循环end repeat add_repeat;return cou;end//delimiter;select g2(0);6,while -end while 语句 (带判断条件的循环语句,执行操作前判断)while_label:while  expr_codition do   #while_label while语句的标注名称,可省略,expr_codition 判断条件,为真时执行循环statement_list;                   #循环体end while while_label;drop function if exists f2;delimiter//create function f2(a int)returns int(20)begindeclare cou int default 0;add_while:while a<=50 do        #先判断条件,为真时执行循环,为假时退出循环set a=a+5;set cou=cou+1;end while add_while;return cou;end//delimiter;select f2(5);

六,查看存储过程

https://mp.csdn.net/mp_blog/creation/editor/121772385

MYSQL数据库的基本操作八(存储函数)相关推荐

  1. 完全优化MySQL数据库性能的八大巧方法

    1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...

  2. 第六天 02.mysql数据库的基本操作和密码爆破

    mysql数据库的基本操作 简介: ​ 数据库是什么 ​ 存储数据的仓库,数据是有组织的进行存储. mysql是一种关系数据库管理系统 使用工具:phpstudy mysql 默认端口 3306 一. ...

  3. MySQL数据库的基本操作流畅版

    MySQL数据库的基本操作流畅版 show databases; 查看本地数据库 2. create database oo: 创建名为oo的数据库 use oo: 指定数据库oo(指定了数据库在可以 ...

  4. mysql数据库读写操作_一看就会,MySQL数据库的基本操作(二)

    上一节学习了MySQL数据库的基本操作的几个命令,1.登陆数据库:mysql -h localhost -u root -p.2.查看已有的数据库命令:show databases. 3.创建自己的数 ...

  5. mysql数据库应用模式与特点_MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述...

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

  6. linux mysql常用基本操作,Linux下MySQL数据库常用基本操作 一

    Linux下MySQL数据库常用基本操作 一 0.登录数据库 mysql -u root -p 1.显示数据库 show databases; 2.选择数据库 use 数据库名; 3.显示数据库中的表 ...

  7. 1-1 MySQL数据库的基本操作 【增删改查】

    1-1 MySQL数据库的基本操作 [增删改查] 一.基础操作 创建数据库 查看数据库 选择数据库 删除数据库 二.建立一个基础数据库 三.基本操作 外键约束与字段自增 数据的增删改 数据查询 数据排 ...

  8. Qt实战案例(28)——利用QSQL相关类实现对MySQL数据库的基本操作及相关设置详解

    目录 一.项目介绍 二.项目基本配置 2.1 安装MySQL 2.2 创建Qt项目 2.3 移动libmysql.dll文件 三.UI界面设计 四.主程序实现 4.1 pro文件 4.2 main.c ...

  9. 【MySQL】Python3 MySQL数据库的基本操作

    [MySQL]Python3 对MySQL数据库的基本操作 安装 MySQL 驱动程序 Python 需要 MySQL 驱动程序来访问 MySQL 数据库. 在此,我选择的驱动程序 是"My ...

最新文章

  1. mesos+marathon平台搭建
  2. Django与数据库操作
  3. cmd运行python服务器,python如何利用paramiko执行服务器命令
  4. 域名与转发服务器ip指向不一致_域名映射到家庭网络(无公网IP)
  5. MIUI 10 Android 原生字体,[教程] MIUI10全局字体替换教程,了解一下?
  6. 小程序制作回到顶部按钮
  7. leetcode718. 最长重复子数组
  8. 在浏览器端调试代码并直接修改原文件、移动端虚拟键盘中实现搜索按钮
  9. Strike price
  10. 量化交易必读:国内12大量化平台全解析
  11. 计算机综述论文能发期刊吗,发表计算机算法论文的sci期刊
  12. object has no attribute 'cleaned_data'
  13. UWP 禁止Pivot swip 手势
  14. html5密码确认属性,HTML5表单及其验证【html自带属性验证】
  15. ac6005直连ap 如何配置_【无线】 AC直连AP配置
  16. 【数模系列】02_三大相关系数+Python代码
  17. uniapp解决H5唤醒APP
  18. idea合并分支只合并某次提交的代码
  19. 面试官:RecyclerView布局动画原理了解吗?
  20. Zed Shaw:程序员的常见健康问题

热门文章

  1. c#解决将json中的\u6b66\u6c49等字符转换成中文
  2. 苹果ipa安装包分发下载教程
  3. 浏览器是如何验证HTTPS证书合法性的?
  4. 入行数据分析要知道数据挖掘到底是做什么的
  5. C语言怎么把单词拆成字母,如何用C语言切出汉语单词和英语单词混合字符串
  6. 微信小程序开发实战11_4 微信支付退款流程
  7. 毕业设计-进销存管理系统
  8. CTFshow入门命令执行29
  9. 安装配置群晖 DS918+ NAS及常用技巧
  10. 校园表白墙网站PHP源码