洞察探索open banking如何通过小程序容器技术助力金融企业实现数据安全和数字化转型
245
2023-11-21
这篇文章主要介绍“mysql变量怎么自定义”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“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 GLOBALmax_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 FROMemployees;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 # 赋值 # 方式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 ; #调用存储过程 CALLadd_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 INTOemp_salFROM employees WHERE employee_id = emp_id; SELECT manager_id INTO mgr_id FROM employees WHEREemployee_id = emp_id;SELECT salary INTO mgr_sal FROM employees WHERE employee_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变量怎么自定义”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~