mysql用户变量和set语句

理解MySQL用户变量的定义与使用
本文深入探讨了MySQL用户变量的概念、定义方法、使用场景以及注意事项,包括如何通过`set`和`select`语句进行赋值,并在查询中有效应用。同时,文章还介绍了用户变量的生命周期和对大小写不敏感的特点,帮助开发者更好地掌握和利用MySQL的用户变量功能。
部署运行你感兴趣的模型镜像
1 用户变量介绍
    用户变量即用户自己定义的变量,我们可以给用户变量分配值,并且可用在任何可以正常使用标量表达式的地方。
    引入用户变量之前我们必须使用set语句或select语句来定义它,然后为它赋一个值,否则变量就只有一个空值。
    用户变量与连接有关。也就是说,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。
2 用户变量定义
    set语句可用于向系统变量或用户变量赋值,针对用户变量的定义如下:
SET @var_name = expr [, @var_name = expr] ...
    也可使用select语句来定义:
SELECT @var_name := expr [, @var_name = expr] ...
    用户变量:以"@"开始,形式为"@var_name",以区分用户变量及列名。它可以是任何随机的,复合的标量表达式,只要其中没有列指定。
    一个变量名可以由当前字符集的数字字母字符和“_”、“$”和“.”组成。缺省字符集是ISO-8859-1 Latin1;这可以用mysqld 的--default-character-set 选项更改字符集。
    对于SET,可以使用=或:=来赋值,对于SELECT只能使用:=来赋值。
    我们可以使用一条简单的select语句查询定义的用户变量的值。
3 用户变量的使用

    3.1 通过set的实例
    用来把一个值赋给一个变量的标量表达式可以是复合表达式。计算,函数,系统标量以及其他用户变量都是允许的,子查询也是允许的。然后通过select语句可以获取一个用户变量的值,结果是带有一行的一个表。

mysql> set @var1=1, @var2='vartest', @var3=abs(-2), @var4=(select count(*) from mysql.user);
mysql> select @var1, @var2, @var3, @var4;
+-------+---------+-------+-------+
| @var1 | @var2   | @var3 | @var4 |
+-------+---------+-------+-------+
|     1 | vartest |     2 |    25 |
+-------+---------+-------+-------+
    在用来为一个用户变量赋值的表达式中,也可以指定其它的用户变量, 需要注意的是mysql首先确定所有表达式的值,之后才会把值赋给变量。
    例如:
mysql> set @varA = 2; 
    对于下面两个例子,varB的值是不同的。
    例1:
mysql> set @varA = 3, @varB = @varA;
mysql> select @varB;
+-------+
| @varB |
+-------+
|     2 |
+-------+
    例2:
mysql> set @varA = 3; 
mysql> set @varB = @varA;
mysql> select @varB;                                             
+-------+
| @varB |
+-------+
|     3 |
+-------+
    

    3.2 通过select的实例
    相对set语句而言,使用select定义变量,会返回一个表格形式的结果。

mysql> select @var1:=1, @var2:='vartest', @var3:=abs(-2), @var4:=(select count(*) from mysql.user);
+----------+------------------+----------------+------------------------------------------+
| @var1:=1 | @var2:='vartest' | @var3:=abs(-2) | @var4:=(select count(*) from mysql.user) |
+----------+------------------+----------------+------------------------------------------+
|        1 | vartest          |              2 |                                       25 |
+----------+------------------+----------------+------------------------------------------+
mysql> select @var1, @var2, @var3, @var4;
+-------+---------+-------+-------+
| @var1 | @var2   | @var3 | @var4 |
+-------+---------+-------+-------+
|     1 | vartest |     2 |    25 |
+-------+---------+-------+-------+
+-------+---------+-------+-------+
|     1 | vartest |     2 |    25 |
+-------+---------+-------+-------+

4 用户变量注意事项
    4.1 用户变量用在where或having子句中,他们必须首先用另一条语句来定义,如下面例子,初次查询没有返回结果,先定以后在查询才有输出。
mysql> select @H:='localhost' from mysql.user where host = @H;
Empty set (0.00 sec)
mysql> select @H:='localhost';
+-----------------+
| @H:='localhost' |
+-----------------+
| localhost       |
+-----------------+
1 row in set (0.00 sec)
mysql> select @H:='localhost', user from mysql.user where host = @H;
+-----------------+-----------------+
| @H:='localhost' | user            |
+-----------------+-----------------+
| localhost       |                 |
| localhost       | jesse           |
| localhost       | local           |
| localhost       | root            |
| localhost       | user_tab_update |
+-----------------+-----------------+

    4.2 用户变量为session级别,当我们关闭客户端或退出登录时用户变量全部消失。如果想用就保存自定义的变量,需要自行创建一个表,将标量insert到表里。
    4.3 用户变量名对大小写不敏感。
    4.4 未定义的变量初始化是null。
5 补充知识:mysql语句do

    在do语句中,使用了一个或多个标量表达式,mysql会一条一条的处理它们,但并不显示表达式的结果。例如我们可以调用函数执行后台的某些事情,而不需要看到其结果。

    例如:

mysql> do sleep(5);
Query OK, 0 rows affected (5.00 sec)

****************************************************************************************
    原文地址: http://blog.youkuaiyun.com/jesseyoung/article/details/40779631
    博客主页: http://blog.youkuaiyun.com/jesseyoung
****************************************************************************************

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

<think>好的,用户想在MySQL Workbench中使用SET语句变量赋值,需要示例语法。首先,我得回忆一下MySQL变量的相关知识。根据之前的引用,用户可能已经了解变量在存储过程中的声明赋值,比如DECLARESET的用法。不过用户现在的问题是关于SET语句MySQL Workbench中的使用,可能需要区分会话变量局部变量。 记得在MySQL中,用户变量以@符号开头,比如@var_name,而局部变量是在存储过程中用DECLARE定义的。用户可能混淆了这两种情况。SET语句既可以用于用户变量,也可以在存储过程中为局部变量赋值。 需要明确语法结构,例如直接设置用户变量可以用SET @var = value;,而在存储过程中则需要在BEGIN...END块内使用DECLARE声明变量后再用SET赋值。同时,要注意作用域的问题,用户变量在整个会话中有效,而局部变量只在存储过程中有效。 可能还需要提供示例代码,展示在存储过程内外如何使用SET语句。比如,用户可能在Workbench中直接执行SET @myVar = 100;,或者在创建存储过程时在内部使用DECLARESET。 此外,要注意用户可能遇到的问题,比如变量作用域导致的错误,或者在存储过程中未正确声明变量就使用SET。需要提醒用户注意这些常见错误,并给出正确的示例。 最后,生成相关问题时要围绕变量赋值、作用域、存储过程的使用等方面,帮助用户深入理解相关知识点。</think>在 MySQL Workbench 中使用 `SET` 语句变量赋值的语法分为两种场景:**用户会话变量****存储过程中的局部变量**。以下是具体说明示例: --- ### 一、用户会话变量(以 `@` 开头) 适用于当前会话(连接)范围内的临时变量,无需声明,直接赋值。 #### 语法 ```sql SET @变量名 = 值; -- 或使用 := 赋值符 ``` #### 示例 1. **基本赋值** ```sql SET @user_count = 100; -- 赋值数值 SET @current_time := NOW(); -- 赋值函数结果 ``` 2. **查询中使用变量** ```sql SET @salary_limit = 5000; SELECT * FROM employees WHERE salary > @salary_limit; ``` 3. **多变量同时赋值** ```sql SET @name = '张三', @age = 28, @department = '销售部'; ``` --- ### 二、存储过程中的局部变量(需 `DECLARE` 声明) 仅在 `BEGIN...END` 块内有效,需先声明后使用[^1]。 #### 语法 ```sql DECLARE 变量名 数据类型 [DEFAULT 默认值]; SET 变量名 = 值; ``` #### 示例 ```sql DELIMITER $$ CREATE PROCEDURE calculate_bonus() BEGIN DECLARE base_salary INT DEFAULT 3000; -- 声明变量 DECLARE bonus INT; SET bonus = base_salary * 0.15; -- 赋值计算值 SELECT bonus AS 奖金; END $$ DELIMITER ; ``` --- ### 注意事项 1. **用户变量作用域**:会话变量在断开连接后自动销毁,可通过 `SELECT @变量名` 验证值。 2. **局部变量限制**:仅在存储过程/函数的 `BEGIN...END` 块内有效,外部不可访问[^1]。 3. **赋值运算符**:`=` `:=` 均可使用,但在 `SELECT` 语句中必须用 `:=` 避免歧义。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值