mysql存储过程有什么变量类型


mysql存储过程的变量类型:1、局部变量,定义语法为“DECLARE 变量名 数据类型”;2、用户变量,定义语法为“set @变量名:=...”;3、系统变量,可分为全局变量“@@global”和会话变量“@@session”。

mysql存储过程有什么变量类型

本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。

mysql存储过程有什么变量类型

MySQL存储过程常见的变量:局部变量、用户变量、系统变量

一、局部变量

在过程体中,可以声明局部变量,用来临时保存一些值。

1、定义局部变量语法:

DECLARE  var_name[, var_name] ...  type [DEFAULT value];

其中,type为MySQL的数据类型,如:int、float、date、varchar(length)

注意:

一览妙笔 一览妙笔

自媒体、编剧、营销人员写作工具

一览妙笔 50 查看详情 一览妙笔

①DECLARE用来声明局部变量,且DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前;可以被用在嵌套的块中,除了那些用相同名字声明变量的块。

②如果要给变量提供一个默认值,使用DEFAULT子句(值可以是常数,也可以指定为一个表达式);如果没有DEFAULT子句,初始值为NULL。

2、基本格式:

CREATE PROCEDURE sp_name ([proc_parameter[,...]])
BEGIN
DECLARE var_name1 type [DEFAULT value];
DECLARE var_name2 type [DEFAULT value];
DECLARE……;
[characteristic ...];

例1:创建过程,为局部变量指定默认值,并调用该过程

mysql>delimiter $$
mysql> create procedure test1(out num1 int)->begin-> declare num2 int default 100;-> set num1=num2;->end->$$
mysql>delimiter ;
mysql>call test1(@num);
mysql> select@num;+------+
| @num |
+------+
| 100 |
+------+

解析:

创建test1存储过程:输出的是num1变量的值,声明局部变量num2是int类型、默认值是100,用set将num2的值(未处理,则默认值)赋给num1;

调用test1:用用户变量num去接收存储过程的输出值num1……

默认值除了字面量,还可以是复杂的表达式,包括标量子查询

例2:创建过程,使用所有球员的数量来初始化一个变量

mysql>delimiter $$
mysql> create procedure test2(out num1 int)->begin-> declare num2 int default(select count(*) fromPLAYERS);-> set num1=num2;->end$$mysql>delimiter ;
mysql>call test2(@num);mysql> select@num;+------+
| @num |
+------+
| 14 |
+------+

注意:MySQL不支持数组作为局部变量。

3、局部变量的作用域:

也就是变量能正常使用而不出错的程序块的范围。

在嵌套块的情况下,

在外部块中声明的变量可以在内部块中直接使用;

在内部块中声明的变量只能在内部块中使用。

4d642006509b50e8077cc4f4d4170260.png

解析:变量v2只能用在内部块b2中,块b3中的set语句和最后一条set语句都是错误的。

二、用户变量

>用户变量与数据库连接有关:在当前连接中声明的变量,在连接断开的时候,就会消失;在此连接中声明的变量无法在另一连接中使用。

>一个@符号表示的就是用户变量。

1、用户变量的定义(set、select):

1)set语句为用户变量赋值:

可以使用“=”或“:=”作为分配符;

分配给每个变量的expr可以为整数、实数、字符串或者NULL值;

mysql> set @zjc:=999;
mysql> select@zjc;+------+
| @zjc |
+------+
| 999 |
+------+

2)select语句为用户变量赋值:

分配符必须为“:=”而不能用“=”,因为在非SET语句中=被视为一个比较操作符;

mysql> select @abc:=123;+-----------+
| @abc:=123 |
+-----------+
| 123 |
+-----------+mysql> select@abc;+------+
| @abc |
+------+
| 123 |
+------+

注意:

①用户变量随处可以定义,随处可以使用;不定义可以直接使用(值默认为null)。

②用户变量的变量名的形式:@var_name,要有@符号。

③滥用用户变量会导致程序难以理解及管理。

拓展之变量赋值:set语法

MySQL里面的变量是不严格限制数据类型的,变量的数据类型根据赋给变量的值而随时变化。

SET variable_assignment [, variable_assignment] ...
variable_assignment:
user_var_name=expr|[GLOBAL | SESSION] system_var_name =expr|[@@global. | @@session. | @@] system_var_name = expr

##用来给用户变量、系统变量赋值,也可以给过程中的局部变量赋值。

注意:

set系统变量时,不带作用域修饰,默认是指会话作用域;

(特别注意,有些系统变量不带作用域修饰,无法设置,因此最好都带上作用域设置系统变量)。

2、用户变量的作用域

只要是在当前连接定义的用户变量,在当前连接里用都是OK的,除此之外都不行。

3、与局部变量区别:

局部变量只有变量名字,没有@符号;用户变量名前有@符号。

都是先定义,再使用;未定义的变量,select值为空。

局部变量只在存储过程内部使用,在过程体外是没有意义的,当begin-end块处理完后,局部变量就消失;而用户变量可以用在存储过程的内部和外部。

Tips:在存储过程内部,使用局部变量,不要使用用户变量。

三、MySQL变量之用户变量与系统变量

1、用户变量如上所述@var_name(一个@符号)

①用户变量和数据库连接有关,连接后声明变量,连接断开后,自动消失;

②select一个没有赋值的用户变量,返回NULL,也就是没有值;

Mysql的变量类似于动态语言,变量的值随所要赋的值的类型而改变。

2、系统变量:根据系统变量的作用域分为:全局变量与会话变量(两个@符号)

①全局变量(@@global.)

在MySQL启动的时候由服务器自动将全局变量初始化为默认值;

全局变量的默认值可以通过更改MySQL配置文件(my.ini、my.cnf)来更改。

②会话变量(@@session.)

在每次建立一个新的连接的时候,由MySQL来初始化;

MYSQL会将当前所有全局变量的值复制一份来做为会话变量(也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的)。

#全局变量与会话变量的区别:对全局变量的修改会影响到整个服务器,但是对会话变量的修改,只会影响到当前的会话。

推荐学习:mysql视频教程

以上就是mysql存储过程有什么变量类型的详细内容,更多请关注其它相关文章!


# 在内部  # 东港网站优化推广  # 情人节网站建设  # 荔湾区seo托管费用  # 镇宁营销网络推广招聘网  # 抖音seo简历  # 昆明免费网站建设  # 南通seo网站优化  # 烟台做网站建设的地方  # 项城网站网站建设  # 安徽网站推广优化哪个好  # mysql  # 子句  # 变量名  # 用在  # 都是  # 有什么  # 默认值  # 全局变量  # 镜像  # 存储过程 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Animex动漫社社登录官网 Animex动漫社资源社入口直达  win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】  《合金装备4》有望推出重制版!制作人发话了  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  PHP utf8_encode 字符编码转换疑难解析与最佳实践  TikTok网页版入口快速访问 TikTok官网账号登录方法  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  mysql如何配置从库只读_mysql从库只读设置方法  Linux如何优化系统启动流程_Linux启动项优化方案  英雄联盟争者留名活动介绍  阿里云共享相册入口在哪  使用jQuery精确检测除指定元素外任意位置的点击事件  Keras中Convolution2D层及其核心辅助层详解  iSpring三分屏制作教程  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  教资成绩怎么查询  《顺丰同城骑士》查看我的技能方法  AO3永久镜像入口开放_AO3最新网址兼容所有浏览器  魔法祈幻界兑换码礼包大全  微信注销后银行卡解绑了吗_微信注销后银行卡解绑状态  《全民k歌》网页版最新登录入口一览  PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略  电脑“无法访问指定设备、路径或文件”怎么办?五种权限设置方法  Coolpad5890 ROM刷机包  Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理  嘀嗒顺风车如何开具电子发票  windows10怎么更改下载路径_windows10默认存储位置修改教程  创建快捷方式启动系统保护  b站如何剪辑视频_b站必剪app使用教程  《深林》冬季章节图文攻略  在PHP环境中正确加载HTML资源:CSS样式与图片路径指南  抖音号已注销怎么解绑企业认证?不解绑企业认证会怎样?  全球各国上班时间表外贸邮件时间  宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?  小红书网页版怎么进 小红书网页版通用入口  J*a列表元素格式化输出教程  高德地图导航路线偏差报警频繁怎么办 高德地图路线偏差修复与优化方法  优化Asyncio嵌套函数调度:使用生产者-消费者模式实现并发流处理  使用TinyButStrong生成HTML并结合Dompdf创建PDF教程  iphone16系列配置参数介绍  Fedora怎么安装 Fedora Workstation安装步骤  win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】  如何用mysql开发用户注册登录功能_mysql用户注册登录数据库设计  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局  C++如何实现矩阵乘法_C++二维数组矩阵运算代码示例  CSS如何控制元素外边距_margin实现布局间隔  天堂漫画网页版在线阅读 天堂漫画手机版入口  VS Code快捷键when上下文子句的妙用  MacBook Pro词典使用指南 

 2022-05-16

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.