mysql变量怎么自定义

58次阅读
没有评论

共计 4218 个字符,预计需要花费 11 分钟才能阅读完成。

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

系统变量

简介

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

代码案例

#  查看系统变量
#  查询全局系统变量
SHOW GLOBAL VARIABLES;
#  查询会话系统变量
SHOW SESSION VARIABLES; 
#  默认查询的是会话系统变量
SHOW VARIABLES; 
#  查询部分系统变量
#  模糊查询
SHOW GLOBAL VARIABLES LIKE  admin_% 
SHOW VARIABLES LIKE  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:SET GLOBAL max_connections = 171;
#  针对于当前的数据库实例是有效的,一旦重启 mysql 服务,就失效了
#  修改会话系统变量
#  方式 1:SET @@session.character_set_client =  gbk 
#  方式 2:SET SESSION character_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(*) FROM employees;
SELECT @count;
SELECT AVG(salary) INTO @avg_sal FROM employees;
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;
#  定义变量
DECLARE  变量名   类型  [default  值]; #  如果没有 DEFAULT 子句,初始值为 NULL
#  赋值
#  方式 1
SET  变量名 = 值;
SET  变量名:= 值;
#  方式 2
SELECT  字段名或表达式  INTO  变量名  FROM  表;
#  查看
SELECT  局部变量名;

局部变量代码案例

DELIMITER // #  开始
CREATE PROCEDURE test_var() #  创建存储过程
BEGIN
 #1、声明局部变量
 DECLARE a INT DEFAULT 0;
 DECLARE b INT ;
 # DECLARE a,b INT DEFAULT 0; #  写法 2
 DECLARE emp_name VARCHAR(25);
 #2、赋值
 SET a = 1;
 SET b := 2;
 #  将 last_name 赋值给 emp_name
 SELECT last_name INTO emp_name FROM employees WHERE employee_id = 101;
 #3、使用
 SELECT a,b,emp_name; 
END //
DELIMITER; #  结束
#调用存储过程
CALL test_var();
#  举例 1:声明局部变量,并分别赋值为 employees 表中 employee_id 为 102 的 last_name 和 salary
DELIMITER // #  开始
CREATE PROCEDURE test_pro()
BEGIN
 # 声明
 DECLARE emp_name VARCHAR(25);
 DECLARE sal DOUBLE(10,2) DEFAULT 0.0;
 # 赋值
 SELECT last_name,salary INTO emp_name,sal #  赋值
 FROM employees
 WHERE employee_id = 102;
 # 使用
 SELECT emp_name,sal;
END //
DELIMITER ; #  结束
#  调用存储过程
CALL test_pro();
#  举例 2:声明两个变量,求和并打印  (分别使用会话用户变量、局部变量的方式实现)#  方式 1:使用会话用户变量
SET @v1 = 10;
SET @v2 := 20;
SET @result := @v1 + @v2;
#  查看
SELECT @result;
#  方式 2:使用局部变量
DELIMITER //
CREATE PROCEDURE add_value()
BEGIN
 # 声明
 DECLARE value1,value2,sum_val INT;
 # 赋值
 SET value1 = 10;
 SET value2 := 100;
 SET sum_val = value1 + value2;
 # 使用
 SELECT sum_val;
END //
DELIMITER ;
#调用存储过程
CALL add_value();
#  举例 3:创建存储过程“different_salary”查询某员工和他领导的薪资差距,并用 IN 参数 emp_id 接收员工 id,用 OUT 参数 dif_salary 输出薪资差距结果
DELIMITER // #  开始
CREATE PROCEDURE different_salary(IN emp_id INT, OUT dif_salary DOUBLE) #  输出 dif_salary DOUBLE
BEGIN
 # 分析:查询出 emp_id 员工的工资; 查询出 emp_id 员工的管理者的 id; 查询管理者 id 的工资; 计算两个工资的差值
 # 声明变量
 DECLARE emp_sal DOUBLE DEFAULT 0.0; # 记录员工的工资
 DECLARE mgr_sal DOUBLE DEFAULT 0.0; # 记录管理者的工资
 DECLARE mgr_id INT DEFAULT 0; # 记录管理者的 id
 # 赋值
 SELECT salary INTO emp_sal FROM employees WHERE employee_id = emp_id;
 SELECT manager_id INTO mgr_id FROM employees WHERE employee_id = emp_id;
 SELECT salary INTO mgr_sal FROM employees WHERE employee_id = mgr_id;
 SET dif_salary = mgr_sal - emp_sal;
END //
DELIMITER; #  结束
#  调用存储过程
SET @emp_id := 103;
SET @dif_sal := 0;
CALL different_salary(@emp_id,@dif_sal);
#  查看
SELECT @dif_sal;

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计4218字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)