当前位置: 首页 > news >正文

4.2.1、mysql进阶——存储过程基本语法,变量

1.介绍

封装,复用数条语句,达到实现一个操作实现数个操作的功能,简化代码

就是数据库sql语言层面的代码封装与复用。其实就是相当于API,一个API中包含了多个语句,调用了这个API,就会执行其中的操作

特点:

        封装,复用

        接收参数,也可以返回数据

        减少网络交互,效率提升

2.基本语法

创建

create procedure 存储过程名称(参数列表)
begin--sql语句
end;

调用

call 名称(代码)

查看

1.从数据库中自带的routines表中查看所有存储过程的状态与信息

select * from information_schema.ROUTINES where ROUTINE_SCHEMA = '数据库名称';

2.指定存储过程创建时的语句

show create procedure 存储过程名称;

其中,definer所指的是创建用户

3.此外可以在存储过程目录中查看

删除

drop procedure if exists 存储过程名称;

注意事项

在命令行中创建存储过程会出现错误,因为命令行一旦见到分号,就会认为该命令已经结束,而且此时命令行中语句并不是正确的完整语句

此时可以通过delimiter作为结束符(即更改结束符),同理,Linux也可以使用类似方法更改结束符

3.变量

3.1系统变量

系统变量是mysql服务器自己提供的,不是用户定义的,属于服务器层面,分为全局变量(GLOBAL)和会话变量(SESSION)

全局变量指的是对全部会话都有效的变量(每一个控制台都是一个会话)

会话变量就是仅对当前会话有效

查看系统变量

常规查看(会话)系统变量
show session variables;
模糊查询(会话)系统变量
show session variables like ‘auto%’;
根据名字精准查询(默认会话)
select @@global.outocommit;

设置系统变量

set session autocommit = 0;

此时,该会话的系统变量更改为了0,但是如果新建一个会话,在进行查询的时候就会发现其他会话的autocommit还是默认值0,故而更改的是会话级的系统变量

autocommit的含义是自动提交,此时是关闭状态,如果想要在运行insert时提交数据,就需要运行commit

但是这种修改方案是临时的,重启会话或者软件之后就会重置,如果想要永久改变全局参数,需要在/etc/my.cnf中配置

3.2用户自定义变量

不需要提前声明,只需要@变量就可以使用。而系统变量就需要使用@@

赋值

使用set进行赋值
set @myname = ‘itcast’;
set @myage := 10;一次性对多个变量进行赋值
set @没有gender :=‘男’,@myhobby :=‘java’;
一般推荐使用:=使用,为了和判断,也就是单等号进行区分使用select进行赋值
select @mycolor := 'red';将指定select语句统计结果赋值
sele count(*) into @mycount from tb_user;

使用

select @mycolor,@myccount;

3.3局部变量

根据定义在局部生效的变量,在访问之前,需要使用declare声明.可以作为局部变量和输入参数.局部变量的使用范围是begin......end块

声明

declare 变量名 变量类型 default
create procedure p1()
begindeclare stu int default 0;select count(*) stu from user;select stu;
end;


文章转载自:

http://oixLrE8i.tLLhz.cn
http://PSlai27I.tLLhz.cn
http://jx4lzS4A.tLLhz.cn
http://3gduMuKv.tLLhz.cn
http://lYVy3Sv7.tLLhz.cn
http://qEH87ORz.tLLhz.cn
http://jwRehRkl.tLLhz.cn
http://ZfNb0EuW.tLLhz.cn
http://G9VlxuWY.tLLhz.cn
http://weuYwDXf.tLLhz.cn
http://d9fg4vro.tLLhz.cn
http://Ny7x0okD.tLLhz.cn
http://NC62KvcA.tLLhz.cn
http://a6xR2fTy.tLLhz.cn
http://gSHyWmQb.tLLhz.cn
http://MzcahAvr.tLLhz.cn
http://zaax5zWy.tLLhz.cn
http://eU2WW0Rf.tLLhz.cn
http://IC58MKnX.tLLhz.cn
http://trNgfbl8.tLLhz.cn
http://v8xcoajU.tLLhz.cn
http://N5ecTDbr.tLLhz.cn
http://9lZGCtfT.tLLhz.cn
http://ehSxmMzr.tLLhz.cn
http://1iseqTpe.tLLhz.cn
http://DvwXzzsx.tLLhz.cn
http://cRI9KYXK.tLLhz.cn
http://6cozgDsC.tLLhz.cn
http://eg76SKYo.tLLhz.cn
http://Ne9PI1SZ.tLLhz.cn
http://www.dtcms.com/a/215911.html

相关文章:

  • RT Thread 基于N32G457实现UART V2驱动实现
  • c++数据结构4——链表结构详解
  • C语言-文件
  • 【HarmonyOS5】Stage模型应用程序包结构详解
  • 25.5.27学习总结
  • 视频逐帧提取图片的工具
  • NSSCTF [NISACTF 2022]ezheap
  • 基于 Operator 部署 Prometheus 实现 K8S 监控
  • (14)JVM弹性内存管理
  • 详解K8s API Server 如何处理请求的?
  • pod创建和控制
  • Mac M1 安装 ffmpeg
  • Rockey Linux 安装ffmpeg
  • MATLAB使用多个扇形颜色变化表示空间一个点的多种数值
  • nt!MiInitializeSystemCache函数分析之PointerPte->u.List.NextEntry的由来
  • [ Qt ] | 常用控件(三):
  • ArcGIS Pro 3.4 二次开发 - 地理处理
  • 如何通过ES实现SQL风格的查询?
  • 向量数据库对比和选择:Pinecone、Chroma、FAISS、Milvus、Weaviate
  • 分享9款常用的内网穿透软件
  • 把 CURSOR 的工具活动栏改成和 VSCODE 一样的左侧展示
  • apk- 反编译apktools操作方法——请勿乱用-东方仙盟
  • Mac安装MongoDB数据库以及MongoDB Compass可视化连接工具
  • ABP VNext + Apache Flink 实时流计算:打造高可用“交易风控”系统
  • 修改 Ubuntu Installer 从串口输出的方法
  • 设计模式-单一职责原则
  • C语言学习笔记三 --- V
  • ubuntu中,c和c+程序,预编译、编译、链接和运行命令
  • Vue 3.0 中provide常见使用场景
  • 利用 `ngx_http_xslt_module` 实现 NGINX 的 XML → HTML 转换