这篇文章主要介绍“mysql变量怎么自定义”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql变量怎么自定义”文章能帮助大家解决问题。

系统变量

简介

1、系统变量系统变量分为全局系统变量(需要添加global关键字)以及会话系统变量(需要添加session关键字),有时也把全局系统变量简称为全局变量,有时也把会话系统变量称为local变量。如果不写,默认会话级别全局系统变量针对于所有会话(连接)有效,但不能跨重启在MySQL中有些系统变量只能是全局的,例如max_connections用于限制服务器的最大连接数;有些系统变量作用域既可以是全局又可以是会话,例如character_set_client用于设置客户端的字符集;有些系统变量的作用域只能是当前会话,例如pseudo_thread_id用于标记当前会话的MySQL连接ID2、用户自定义变量每一个MySQL客户机成功连接MySQL服务器后,都会产生与之对应的会话。会话期间,MySQL服务实例会在MySQL服务器内存中生成与该会话对应的会话系统变量,这些会话系统变量的初始值是全局系统变量值的复制会话系统变量仅针对于当前会话(连接)有效。会话期间,当前会话对某个会话系统变量值的修改,不会影响其他会话同一个会话系统变量的值会话1对某个全局系统变量值的修改会导致会话2中同一个全局系统变量值的修改

代码案例

#查看系统变量#查询全局系统变量SHOWGLOBALVARIABLES;#查询会话系统变量SHOWSESSIONVARIABLES;#默认查询的是会话系统变量SHOWVARIABLES;#查询部分系统变量#模糊查询SHOWGLOBALVARIABLESLIKE'admin_%';SHOWVARIABLESLIKE'character_%';#查看指定系统变量SELECT@@global.max_connections;SELECT@@global.character_set_client;#错误写法,由于该变量是会话系统变量SELECT@@global.pseudo_thread_id;#错误写法,由于该变量是全局系统变量SELECT@@session.max_connections;#查看会话系统变量SELECT@@session.character_set_client;SELECT@@session.pseudo_thread_id;#当变量在全局系统变量或会话系统量中都有时,先查询会话系统变量,再查询全局系统变量SELECT@@character_set_client;#修改系统变量的值#修改全局系统变量#方式1:SET@@global.max_connections=161;#方式2:SETGLOBALmax_connections=171;#针对于当前的数据库实例是有效的,一旦重启mysql服务,就失效了#修改会话系统变量#方式1:SET@@session.character_set_client='gbk';#方式2:SETSESSIONcharacter_set_client='gbk';#针对于当前会话是有效的,一旦结束会话,重新建立起新的会话,就失效了用户变量

简介

分为会话用户变量和局部变量会话用户变量:作用域和会话变量一样,只对当前连接会话有效局部变量:只在BEGIN和END语句块中有效。局部变量只能在存储过程和函数中使用

定义变量

#方式1:“=”或“:=”SET@用户变量=值;SET@用户变量:=值;#方式2:“:=”或INTO关键字SELECT@用户变量:=表达式[FROM等子句];SELECT表达式INTO@用户变量[FROM等子句];

查看用户变量的值

SELECT@用户变量

会话用户变量代码案例

#方式1:SET@m1=1;SET@m2:=2;SET@sum:=@m1+@m2;#查看SELECT@sum;#方式2:SELECT@count:=COUNT(*)FROMemployees;SELECT@count;SELECTAVG(salary)INTO@avg_salFROMemployees;SELECT@avg_sal;

局部变量简介

使用DECLARE声明声明并使用在BEGIN...END中(使用在存储过程、函数中)DECLARE的方式声明的局部变量必须声明在BEGIN中的首行的位置BEGIN#声明局部变量DECLARE变量名1变量数据类型[DEFAULT变量默认值];DECLARE变量名2,变量名3,...变量数据类型[DEFAULT变量默认值];#为局部变量赋值SET变量名1=值;SELECT值INTO变量名2[FROM子句];#查看局部变量的值SELECT变量1,变量2,变量3;END#定义变量DECLARE变量名类型[default值];#如果没有DEFAULT子句,初始值为NULL#赋值#方式1SET变量名=值;SET变量名:=值;#方式2SELECT字段名或表达式INTO变量名FROM表;#查看SELECT局部变量名;

局部变量代码案例

DELIMITER//#开始CREATEPROCEDUREtest_var()#创建存储过程BEGIN#1、声明局部变量DECLAREaINTDEFAULT0;DECLAREbINT;#DECLAREa,bINTDEFAULT0;#写法2DECLAREemp_nameVARCHAR(25);#2、赋值SETa=1;SETb:=2;#将last_name赋值给emp_nameSELECTlast_nameINTOemp_nameFROMemployeesWHEREemployee_id=101;#3、使用SELECTa,b,emp_name;END//DELIMITER;#结束#调用存储过程CALLtest_var();#举例1:声明局部变量,并分别赋值为employees表中employee_id为102的last_name和salaryDELIMITER//#开始CREATEPROCEDUREtest_pro()BEGIN#声明DECLAREemp_nameVARCHAR(25);DECLAREsalDOUBLE(10,2)DEFAULT0.0;#赋值SELECTlast_name,salaryINTOemp_name,sal#赋值FROMemployeesWHEREemployee_id=102;#使用SELECTemp_name,sal;END//DELIMITER;#结束#调用存储过程CALLtest_pro();#举例2:声明两个变量,求和并打印(分别使用会话用户变量、局部变量的方式实现)#方式1:使用会话用户变量SET@v1=10;SET@v2:=20;SET@result:=@v1+@v2;#查看SELECT@result;#方式2:使用局部变量DELIMITER//CREATEPROCEDUREadd_value()BEGIN#声明DECLAREvalue1,value2,sum_valINT;#赋值SETvalue1=10;SETvalue2:=100;SETsum_val=value1+value2;#使用SELECTsum_val;END//DELIMITER;#调用存储过程CALLadd_value();#举例3:创建存储过程“different_salary”查询某员工和他领导的薪资差距,并用IN参数emp_id接收员工id,用OUT参数dif_salary输出薪资差距结果DELIMITER//#开始CREATEPROCEDUREdifferent_salary(INemp_idINT,OUTdif_salaryDOUBLE)#输出dif_salaryDOUBLEBEGIN#分析:查询出emp_id员工的工资;查询出emp_id员工的管理者的id;查询管理者id的工资;计算两个工资的差值#声明变量DECLAREemp_salDOUBLEDEFAULT0.0;#记录员工的工资DECLAREmgr_salDOUBLEDEFAULT0.0;#记录管理者的工资DECLAREmgr_idINTDEFAULT0;#记录管理者的id#赋值SELECTsalaryINTOemp_salFROMemployeesWHEREemployee_id=emp_id;SELECTmanager_idINTOmgr_idFROMemployeesWHEREemployee_id=emp_id;SELECTsalaryINTOmgr_salFROMemployeesWHEREemployee_id=mgr_id;SETdif_salary=mgr_sal-emp_sal;END//DELIMITER;#结束#调用存储过程SET@emp_id:=103;SET@dif_sal:=0;CALLdifferent_salary(@emp_id,@dif_sal);#查看SELECT@dif_sal;

关于“mysql变量怎么自定义”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。