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之存储过程和函数相关推荐

  1. MySQL之存储过程及函数的使用

    MySQL之存储过程及函数的使用 4.存储过程和函数 4.1 存储过程和函数概述 存储过程和函数是 事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作 ...

  2. mysql创建存储过程及函数详解

    文章来源: 学习通http://www.bdgxy.com/ 目录 1. 存储过程 1.1. 基本语法 1.2 创建一个指定执行权限的存储过程 1.3?DELIMITER 的使用 2. 创建函数? 1 ...

  3. MySQL 案例实战--MySQL数据库 存储过程 存储函数

    MySQL数据库 存储过程 & 存储函数 前言 一.什么是存储过程 & 存储函数 二.存储过程的创建和调用 三.存储函数的创建和调用 前言 本环境是基于 Centos 7.8 系统构建 ...

  4. MySQL的存储过程和函数简单写法

    什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法: ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功 ...

  5. mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...

    概述 抽空总结一下mysql的一些概念性内容,涉及存储过程.函数.视图.触发器等. 一.查看存储过程.函数.视图.触发器.表 1.存储过程 select * from mysql.proc where ...

  6. MySQL高级-存储过程和函数

    存储过程和函数 1.存储过程和函数概述 2 创建存储过程 3 调用存储过程 4 查看存储过程 5 删除存储过程 6 语法 6.1 变量 6.2 if条件判断 6.3 传递参数 6.4 case结构 6 ...

  7. MySQL——创建存储过程和函数

    简单地说,存储过程就是一条或多条  SQL  语句的集合,可视为批文件,但是其作用不仅限于批处理.存储程序可以分为存储过程和函数.存储过程要用 CALL  语句来调用,并且只能用输出变量返回值. 1. ...

  8. MySQL 基础 ———— 存储过程与函数

    一.存储过程介绍 存储过程是一组预先编译好的SQL语句的集合,可理解成批处理语句.它的优点主要有以下几点: 1.提高代码的重用性: 2.简化操作: 3.减少了编译次数并且减少了和数据库服务器的连接次数 ...

  9. Mysql使用存储过程与函数进行批量插入数据

    批量插入 第一步表格 SET FOREIGN_KEY_CHECKS=0;-- ---------------------------- -- Table structure for dept -- - ...

最新文章

  1. java bufferedwrite_Java BufferedWriter BufferedReader 源码分析
  2. log4j(四)——如何控制不同风格的日志信息的输出?
  3. python numpy安装-Numpy安装
  4. WPF系列(一)第一个WPF应用程序!
  5. linux 镜像自动安装,制作能自动安装的CentOS镜像文件
  6. java的语法知识_Java语法知识点
  7. 简易分享功能(非第三方)
  8. Java入门第三季——Java中的集合框架(中):MapHashMap
  9. winform 只允许显示一个子窗体
  10. Ambari 安装配置 MySql
  11. python对数组的操作_Python Numpy库对数组的操作详解,
  12. 数据结构常见面试题,一网打尽!
  13. 图灵之谜-《艾伦·图灵传》序
  14. 内存不能为written或read的解决方案(比较简单)
  15. element-ui的select组件设置预选项没问题,但重新选中不改变的问题解决
  16. 【Kotlin -- 知识点】Kotlin 中的委托
  17. jzoj 4399: 加减乘除模五则运算
  18. “天罡”霸气侧漏,华为5G长驱直入
  19. 链表实现电话簿(C++)
  20. 苹果系统使用svg 动画_为什么要使用SVG图像:如何为SVG设置动画并使其快速闪电化

热门文章

  1. [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化...
  2. 最全的测试工具以及测试需要掌握的工具
  3. javascript js 拖动效果 兼 ie 6,7,8 firefox Chrome(原创,想要尽管拿去用。技术支持:QQ3084532)...
  4. Linux 编译时查找错误字符,编译Linux内核时出现“fatal error: linux/netfilter/xt_dscp: No such file or directory”...
  5. L2-038 病毒溯源 (25 分)-PAT 团体程序设计天梯赛 GPLT
  6. 蓝桥杯 ALGO-157 算法训练 阶乘末尾
  7. Mac OSX上安装Python的方法
  8. 蓝桥杯 ADV-175 算法提高 三个整数的排序
  9. LeetCode383. Ransom Note
  10. 专家系统代码实现_前端代码是怎样智能生成的 - 语义化篇