概述
MySQL 官方手册 8.0 Reference Manual - User-Defined Variables
您可以在一个语句中将一个值存储在用户定义的变量中,然后在另一个语句中引用它。这使您能够将值从一个语句传递到另一个语句。
用户变量写为 @var_name
,其中变量名 var_name
由当前字符集字母、数字、.
、_
和 $
组成。如果将用户变量名称引用为字符串或标识符(例如, 、 或),则用户变量名称可以包含其他字符。 默认字符集是cp1252 (Latin1)。可以用mysqld的–default-character-set选项更改字符集。用户变量名对大小写不敏感。
用户定义的变量是特定于会话的。一个客户端定义的用户变量不能被其他客户端看到或使用。(例外:有权访问 Performance Schema user_variables_by_thread
表的用户可以查看所有会话的所有用户变量。)当该客户端退出时,将自动释放给定客户端会话的所有变量。
用户变量名不区分大小写。名称的最大长度为 64 个字符。
设置用户定义变量的一种方法是发出一条 SET
语句:
SET @var_name = expr [, @var_name = expr] ...
对于SET,可以使用=
或:=
作为赋值运算符。可以从一组有限的数据类型中为用户变量分配一个值:整数、十进制、浮点、二进制或非二进制字符串或NULL
值。
十进制和实数值的赋值不会保留值的精度或小数位数。允许类型之一以外的类型的值被转换为允许类型。例如,具有时间或空间数据类型的值被转换为二进制字符串。具有JSON
数据类型的值被转换为字符集为utf8mb4
且归类 为 的字符串 utf8mb4_bin
。
如果为用户变量分配了非二进制(字符)字符串值,则它具有与字符串相同的字符集和排序规则。用户变量的可强制性是隐含的。(这与表列值的可强制性相同。)
分配给用户变量的十六进制或位值被视为二进制字符串。要将十六进制或位值作为数字分配给用户变量,请在数字上下文中使用它。例如,添加 0 或使用 CAST(... AS UNSIGNED)
:
mysql> SET @v1 = X'41';
mysql> SET @v2 = X'41'+0;
mysql> SET @v3 = CAST(X'41' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1 | @v2 | @v3 |
+------+------+------+
| A | 65 | 65 |
+------+------+------+
mysql> SET @v1 = b'1000001';
mysql> SET @v2 = b'1000001'+0;
mysql> SET @v3 = CAST(b'1000001' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1 | @v2 | @v3 |
+------+------+------+
| A | 65 | 65 |
+------+------+------+
如果在结果集中选择了用户变量的值,则将其作为字符串返回给客户端。
如果您引用一个尚未初始化的变量,则它的值为NULL
和 类型为字符串。
变量也可以在语句上下文中赋值,以这种方式进行赋值时,必须使用 :=
作为赋值运算符;=
在SET
以外的语句中被视为比较运算符 。
HAVING
, GROUP BY
, 和 ORDER BY
, 当引用在选择表达式列表中分配了值的变量时,不能按预期工作,因为该表达式是在客户端上计算的,因此可以使用前一行中的陈旧列值。
SELECT (@rowNum:=@rowNum+1) AS rowNum,a.* FROM a,(SELECT(@rowNum:=0)) b
最后
以上就是复杂皮带为你收集整理的MySQL函数&关键字(八)自定义变量 @var_name的全部内容,希望文章能够帮你解决MySQL函数&关键字(八)自定义变量 @var_name所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复