翻译:用户变量(User-Defined Variable)(已提交到MariaDB官方手册)
Posted 骏马金龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻译:用户变量(User-Defined Variable)(已提交到MariaDB官方手册)相关的知识,希望对你有一定的参考价值。
本文为mariadb官方手册:User-Defined Variables的译文。
原文:https://mariadb.com/kb/en/user-defined-variables/
我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/user-defined-variables/
用户变量是指由用户创建,并存在于会话当中的变量。这意味着其他用户无法访问,且在当前会话关闭时,该用户变量自动过期。但是,这些变量可以在多个查询和存储程序stored programs之间共享使用。
用户变量的名称前必须加上单个 at 符号作为前缀(@)。用户变量的名称部分可以安全地使用保留关键词,名称部分所允许的字符包括ASCII字母、数字、美元符($)、下划线(_)和点(.)。如果要使用其他字符,需要使用以下几种引用方式包围它:
- @`var_name`
- @\'var_name\'
- @"var_name"
这些字符可以进行正常的转义(逃逸)。
现在用户变量是不区分大小写的,但在mysql 4.1和更老的版本中是区分大小写的。
用户变量是无法声明的。可以直接读取一个存在或不存在的用户变量,只不过不存在的用户变量返回值为NULL。要设置一个用户变量,可以使用以下几种方式:
- SET语句;
- SQL语句中使用 := 操作符;
- SELECT ... INTO。
由于无法声明用户变量的类型,唯一能够强制它们类型的方式是使用CAST()或CONVERT()进行转换:
SET @str = CAST(123 AS CHAR(5));
如果变量未赋值,则其值为NULL:
SELECT @x IS NULL;
+------------+
| @x IS NULL |
+------------+
| 1 |
+------------+
在同一个语句中同时读取变量、设置变量的值是不安全的行为(除非使用的是SET命令),因为这些操作的顺序是不定的。
用户变量可以用在绝大多数可以接受SQL表达式的MariaDB语句和子句中。但是有一些例外,例如LIMIT子句。
用户变量不能替代语句中的关键字、标识符等,除非它们用在预编译PREPARE语句中。(译者注:英文版内容缺失,此句为本人自行修改。例如@a="SELECT"
,却无法@a * from t
。正如下面的例子中,如果用户变量@sql
不在PREPARE语句中进行预编译,它无法直接执行)
@sql = \'DELETE FROM my_table WHERE c>1;\';
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
另一个较常用的功能是在查询语句中充当计数器:
SET @var = 0;
SELECT a, b, c, (@var:=@var+1) AS counter FROM my_table;
以上是关于翻译:用户变量(User-Defined Variable)(已提交到MariaDB官方手册)的主要内容,如果未能解决你的问题,请参考以下文章
从 React Native 中访问“用户定义的”xcode 变量
这句话怎么翻译,文中in the context of是啥意思