如何在 mysql 中声明和使用变量
在这篇教程文章中,我们将解释如何在 mysql 数据库的 sql 代码中声明变量。
在 sql 脚本上,可以在执行一系列命令期间使用变量存储值,并使用它们代替文字。
mysql 中的用户定义变量
mysql 可以识别不同类型的变量。第一种类型是用户定义的变量,由作为前缀的@
符号标识。在 mysql 中,你可以访问用户定义的变量,而无需事先声明或初始化它们。如果你这样做,当初始化时,会给变量分配一个 null 值。例如,如果你对一个变量使用 select
,而没有给它赋值,就像在这种情况下。
select@somevariable;
mysql 会返回一个 null 值。
初始化用户定义的变量
要初始化一个用户定义的变量,需要使用 set
或 select
语句。你可以一次初始化许多变量,用逗号分隔每个赋值语句,如下所示。
set@firstvar=1,@secondvar=2;
一旦你给一个变量赋值,它将根据给定的值有一个类型。在前面的例子中,@firstvar
和@secondvar
的类型是 int
。
用户定义的变量的生命周期在会话处于活动状态时就会持续,而且它对其他会话是不可见的。一旦会话关闭,该变量就会消失。
有 5 种数据类型可以分配给用户自定义变量。
- 字符串(二进制或非二进制
- 整数
- 小数
- 浮点
null
,它可以与任何类型相关联。
要给一个变量赋值,可以使用符号 =
或:=
。下面两个语句具有相同的效果。
set@myintvar=1;set@myintvar:=1;
在 select
语句中使用变量用作字段
变量可以成为 select
语句的字段列表的一部分。当你在选择中指定字段时,你可以混合变量和字段名,就像这个例子一样。
set@indexvar:=1;select@indexvar,isbnfrombooks;
在 mysql 中声明本地变量
局部变量不需要在其名称中使用@
前缀,但在使用之前必须声明它们。要声明一个局部变量,可以使用 declare
语句,或者在 stored procedure
声明中使用它作为参数。
当你声明一个局部变量时,可以选择给它分配一个默认值。如果你不分配任何默认值,那么变量将被初始化为一个 null 值。
每个变量都生活在一个范围内,由包含其声明的 begin ... end
块限定。
下面的例子说明了使用局部变量的两种不同方式:作为过程参数和作为过程内部变量。
delimiter$$createproceduregetupdatedprices(itemcountint)begindeclarefactordecimal(5,2);setfactor:=3.45;selectpartno,description,itemcount*factor*listpricefromcatalogue;end$$delimiter;
在前面的例子中,变量 itemcount
被用作参数,将值传递给过程。之后在 select
语句中使用该变量来乘以从表中获得的 listprice
字段。本地变量 factor
用于存储一个小数值,用来乘以得到的价格。
在 mysql 中声明系统变量
还有第三种类型的变量称为系统变量,用于存储影响单个客户端连接的值(session
变量)或影响整个服务器操作的值(global
变量)。
系统变量通常在服务器启动时设置。要做到这一点,你可以使用命令行或在选项文件中包含 set
语句。但是它们的值可以在 sql 脚本中进行修改。
系统变量可以使用双@
符号作为前缀,或者在 set
语句中使用 global
或 session
字样来识别。区分 global
和 session
系统变量的另一种方法是使用第二个前缀:global
或 session
。下面是一些如何为系统变量赋值的例子。
-- alternative ways to set session system variables:
setinteractive_timeout=30000;setsessioninteractive_timeout=30000;set@@interactive_timeout=30000;set@@local.interactive_timeout=30000;-- alternative ways to set global system variables:
set@@global.interactive_timeout=30000;setglobalinteractive_timeout=30000;
要查看会话中或服务器中使用的系统变量,可以使用 show variables
语句。如果你想得到一些特定变量的值,你可以添加一个比较运算符来过滤这个列表。例如:
showvariableslike'%timeout%'
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
如何从 pandas 的日期时间列中提取月份和年份
发布时间:2024/04/23 浏览次数:160 分类:python
-
我们可以分别使用 dt.year()和 dt.month()方法从 datetime 列中提取出年和蛾。我们还可以使用 pandas.datetimeindex.month 以及 pandas.datetimeindex.year 和 strftime()方法提取年份和月份。
如何检查 nan 是否存在于 pandas dataframe 中
发布时间:2024/04/23 浏览次数:208 分类:python
-
我们可以使用 isnull()和 isna()方法检查 pandas dataframe 中是否存在 nan。
如何在 pandas dataframe 的列中将所有 nan 值替换为零
发布时间:2024/04/23 浏览次数:198 分类:python
-
在 pandas 库中使用 df.fillna(),df.replace()方法在 dataframe 中将 nan 值替换为零
如何在 pandas 中更改列的数据类型
发布时间:2024/04/23 浏览次数:183 分类:python
-
本教程介绍了如何通过使用 to_numaric,as_type 和 infer 对象来更改 pandas 中列的数据类型。
如何对 pandas 中的 dataframe 行随机排序
发布时间:2024/04/23 浏览次数:128 分类:python
-
我们可以使用 sample(),shuffle()和 permutation()方法随机地对 pandas 中的 dataframe 行进行随机排序。
如何获取 pandas dataframe 的行数
发布时间:2024/04/23 浏览次数:71 分类:python
-
本教程介绍如何通过使用 shape,len()来获取 pandas dataframe 的行数,以及有多少行元素满足条件。
如何基于 pandas 中的给定条件创建 dataframe 列
发布时间:2024/04/22 浏览次数:155 分类:python
-
我们可以使用列表推导技术,numpy 方法,apply()方法和 map()方法对 pandas 中的给定条件创建 dataframe 列。