我是靠谱客的博主 复杂皮带,最近开发中收集的这篇文章主要介绍MySQL函数&关键字(八)自定义变量 @var_name,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部