MySQL之存储过程和函数
1. 变量
系统变量:
定义:变量由系统提供,不是用户定义,属于服务器层面
查看所有变量:SELECT global | session variables;
查看满足条件的部分系统变量:SELECT global | session variables like '%char%';
查看某个系统变量:select @@系统变量名 或者 select @@[session]global.系统变量名;如select @@tx_isolation查看事务隔离级别
为变量赋值:set 系统变量名=值
系统全局变量(GLOBAL):
# 查看全部的系统全局变量 SELECT GLOBAL VARIABLES;# 查看部分系统全局变量 SELECT GLOBAL VARIABLES LIKE '%char%'; # 其他同上方式
作用域:服务器每次启动将为所有的全局变量赋初值,针对于所有会话有效,但不能跨重启;
会话变量(SESSION):
作用域:变量仅对于当前会话连接有效。
自定义变量:
使用步骤:声明、赋值、使用(查看,比较,运算符)
作用域:针对于当前会话有效。
# 赋值操作符:=或:= SET @用户变量名=值; SET @用户变量名:=值; SElECT @用户变量名:=值;
局部变量:
作用域:仅仅在定义它的begin end之间有效
# 声明 DECLARE 变量名 类型; DECLARE 变量名 类型 DEFAULT 值;
# 赋值 SET 局部变量=值 SET 局部变量:=值
# begin与end中根据查询结果赋值 declare v1 int default 0; # 声明并初始化 select count(*) into v1 from table_name ;
2. 存储过程
存储过程类似于python中的函数,完成了一组操作,只对外暴露引用名,隐藏了具体实现细节
定义:一组预先编译好的SQL语句的集合,理解成批处理语句
优点:
1. 提高了代码的重用性;
2. 简化了操作;
3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
创建语法:
create procedure 存储过程名(参数列表) begin存储过程体(一组合法有效的SQL语句) end
参数模式:在mysql中提供了三组参数模式
IN | 该参数可以用作输入,也就是说该参数需要调用方传入值 |
OUT | 该参数可以作为输出,类似python中return之后的返回值 |
INOUT | 该参数即可以作为参数又可以作为参数输出 |
其他:存储过程体只有一条语句时, begin和end可以省略;否则就需要使用delimiter来重新设置语句结束符
调用存储过程:call 存储过程名(参数)
实例演示:
1. 无参,向指定表插入数据
2. IN模式,
3.OUT模式,根据指定name查询其财产并返回
4. INOUT模式,参数既能作为返回值,也能作为接收值,在调用该存储过程的时候,就需要传入已经初始化的两个用户变量来完成。
3.函数
和存储过程大致相同,区别在于:
1. 存储过程可以有0个或者多个返回,适合批量插入,批量更新,
2. 有且仅有1个返回,适合做处理数据后返回一个结果。
语法格式:
create function 函数名(参数列表) returns 返回类型 begin函数体 end
注意:参数列表包含两个部分:参数名及参数类型;函数体中肯定会有return语句,如果没有会报错
调用语法:
select 函数名(参数);
实例:
delimiter $ create function myfun(mid int) returns int begindeclare res int default 0;select count(*) into res from transaction where id<mid;return res; end$
查看与删除函数:
# 查看 show create function myfun;# 删除 drop function myfun;
4. 流程控制结构
顺序结构:程序从上向下依次执行
分支结构:程序从两条或多条路径选择一条去执行
循环结构:在满足一定条件下,重复执行一段代码
case结构:可以作为独立语句来使用,放在begin end中
#应用一:做等值的布尔判断,类似于switch #语法: case 变量或表达式 when 要判断的值 then 返回的值或语句; when 要判断的值 then 返回的值或语句; ... else 返回的值或语句; end case;
# 应用二:做区间判断 case when 判断的条件表达式1 then 返回的值; when 判断的条件表达式1 then 返回的值; ... else 返回的值; end case;
# 传入mid,与flag(9)作比较 create function myfunc(mid int) returns varchar(20) begindeclare flag int default 9;declare res varchar(10) default '';casewhen mid>flag then set res='mid>flag';when mid<flag then set res='mid<flag';else set res='mid=flag';end case;return res; end$
if结构:实现多重分支, 只能用在begin end中
语法:
if 条件1 then 语句1; elseif 条件2 then 语句2; ..... [else 语句n;] # 可选 end if;
循环结构:
分类有while、loop、repeat
循环控制:iterate类似于continue、leave类似于break
语法:
# while 【标签】: while 循环条件 do循环体; end while 【标签】 ;
# loop 死循环 【标签:】loop循环体; end loop 【标签】;
# repeat类似于do while 【标签:】repeat循环体 until 结束循环的条件 end repeat 【标签】;
实例演示:
批量插入
delimiter $ create procedure pro_insert(IN count INT) begindeclare i int default 0; declare last_letter char default ''; #transaction最后一行数据的name值的第一位字符,如'AAAAAA'则取'A'declare max_ascii int default 0; #transaction表的最后一行数据的name值的第一位字符的ASCII码select substr(name, 1, 1) into last_letter from transaction where id=(select max(id) from transaction); #为last_letter变量赋值set max_ascii=ASCII(last_letter); #为max_ascii赋值_insert: while i<count do # 循环的别名为_insertset max_ascii=max_ascii+1;set i=i+1;insert into transaction values(null, repeat(char(max_ascii), 6), 8000);end while _insert; end$
转载于:https://www.cnblogs.com/kisun168/p/11326357.html
MySQL之存储过程和函数相关推荐
- MySQL之存储过程及函数的使用
MySQL之存储过程及函数的使用 4.存储过程和函数 4.1 存储过程和函数概述 存储过程和函数是 事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作 ...
- mysql创建存储过程及函数详解
文章来源: 学习通http://www.bdgxy.com/ 目录 1. 存储过程 1.1. 基本语法 1.2 创建一个指定执行权限的存储过程 1.3?DELIMITER 的使用 2. 创建函数? 1 ...
- MySQL 案例实战--MySQL数据库 存储过程 存储函数
MySQL数据库 存储过程 & 存储函数 前言 一.什么是存储过程 & 存储函数 二.存储过程的创建和调用 三.存储函数的创建和调用 前言 本环境是基于 Centos 7.8 系统构建 ...
- MySQL的存储过程和函数简单写法
什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法: ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功 ...
- mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...
概述 抽空总结一下mysql的一些概念性内容,涉及存储过程.函数.视图.触发器等. 一.查看存储过程.函数.视图.触发器.表 1.存储过程 select * from mysql.proc where ...
- MySQL高级-存储过程和函数
存储过程和函数 1.存储过程和函数概述 2 创建存储过程 3 调用存储过程 4 查看存储过程 5 删除存储过程 6 语法 6.1 变量 6.2 if条件判断 6.3 传递参数 6.4 case结构 6 ...
- MySQL——创建存储过程和函数
简单地说,存储过程就是一条或多条 SQL 语句的集合,可视为批文件,但是其作用不仅限于批处理.存储程序可以分为存储过程和函数.存储过程要用 CALL 语句来调用,并且只能用输出变量返回值. 1. ...
- MySQL 基础 ———— 存储过程与函数
一.存储过程介绍 存储过程是一组预先编译好的SQL语句的集合,可理解成批处理语句.它的优点主要有以下几点: 1.提高代码的重用性: 2.简化操作: 3.减少了编译次数并且减少了和数据库服务器的连接次数 ...
- Mysql使用存储过程与函数进行批量插入数据
批量插入 第一步表格 SET FOREIGN_KEY_CHECKS=0;-- ---------------------------- -- Table structure for dept -- - ...
最新文章
- java bufferedwrite_Java BufferedWriter BufferedReader 源码分析
- log4j(四)——如何控制不同风格的日志信息的输出?
- python numpy安装-Numpy安装
- WPF系列(一)第一个WPF应用程序!
- linux 镜像自动安装,制作能自动安装的CentOS镜像文件
- java的语法知识_Java语法知识点
- 简易分享功能(非第三方)
- Java入门第三季——Java中的集合框架(中):MapHashMap
- winform 只允许显示一个子窗体
- Ambari 安装配置 MySql
- python对数组的操作_Python Numpy库对数组的操作详解,
- 数据结构常见面试题,一网打尽!
- 图灵之谜-《艾伦·图灵传》序
- 内存不能为written或read的解决方案(比较简单)
- element-ui的select组件设置预选项没问题,但重新选中不改变的问题解决
- 【Kotlin -- 知识点】Kotlin 中的委托
- jzoj 4399: 加减乘除模五则运算
- “天罡”霸气侧漏,华为5G长驱直入
- 链表实现电话簿(C++)
- 苹果系统使用svg 动画_为什么要使用SVG图像:如何为SVG设置动画并使其快速闪电化
热门文章
- [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化...
- 最全的测试工具以及测试需要掌握的工具
- javascript js 拖动效果 兼 ie 6,7,8 firefox Chrome(原创,想要尽管拿去用。技术支持:QQ3084532)...
- Linux 编译时查找错误字符,编译Linux内核时出现“fatal error: linux/netfilter/xt_dscp: No such file or directory”...
- L2-038 病毒溯源 (25 分)-PAT 团体程序设计天梯赛 GPLT
- 蓝桥杯 ALGO-157 算法训练 阶乘末尾
- Mac OSX上安装Python的方法
- 蓝桥杯 ADV-175 算法提高 三个整数的排序
- LeetCode383. Ransom Note
- 专家系统代码实现_前端代码是怎样智能生成的 - 语义化篇