翻译:用户变量(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官方手册)的更多相关文章
- 翻译:CREATE FUNCTION语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:CREATE FUNCTION的译文. 原文:https://mariadb.com/kb/en/library/create-function/我提交到MariaDB官 ...
- 翻译:SET PASSWORD语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:SET PASSWORD的译文. 原文:https://mariadb.com/kb/en/library/set-password/我提交到MariaDB官方手册的译文 ...
- 翻译:SELECT INTO语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:SELECT INTO的译文. 原文:https://mariadb.com/kb/en/selectinto/我提交到MariaDB官方手册的译文:https://ma ...
- 翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:DECLARE HANDLER的译文. 原文:https://mariadb.com/kb/en/library/declare-handler/我提交到MariaDB官 ...
- 翻译:CREATE TRIGGER语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:CREATE TRIGGER的译文. 原文:https://mariadb.com/kb/en/create-trigger/我提交到MariaDB官方手册的译文:htt ...
- 翻译:CREATE PROCEDURE语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:CREATE PROCEDURE的译文. 原文:https://mariadb.com/kb/en/create-procedure/我提交到MariaDB官方手册的译文 ...
- 翻译:SET Variable(已提交到MariaDB官方手册)
本文为mariadb官方手册:SET Variable的译文. 原文:https://mariadb.com/kb/en/set-variable/我提交到MariaDB官方手册的译文:https:/ ...
- 翻译:DECLARE Variable(已提交到MariaDB官方手册)
本文为mariadb官方手册:DECLARE Variable的译文. 原文:https://mariadb.com/kb/en/library/declare-variable/我提交到MariaD ...
- 翻译:SET子句(已提交到MariaDB官方手册)
本文为mariadb官方手册:SET的译文. 原文:https://mariadb.com/kb/en/set/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh ...
随机推荐
- js之Ajax下载文件
传统上,客户端将依靠浏览器来处理从服务器下载文件.然而,这种方法需要打开一个新的浏览器窗口,iframe或任何其他类型的不友好和黑客行为.为下载请求添加额外的头信息也很困难.更好的解决方案是使用HTM ...
- window系统中 mongodb创建用户名和密码
use admindb.createUser({user:"root",pwd:"root",roles:[{"role":"us ...
- Exp3 免杀原理与实践 ——20164325王晓蕊
一.实践基本内容 1.实践目标 (1) 正确使用msf编码器(√),msfvenom生成如jar之类的其他文件(√),veil-evasion(√),加壳工具(√),使用shellcode编程(√) ...
- autium designer 软件使用:
1mil=0.0254mm 1,英文输入法A建,对齐方式. 2,焊盘,过孔区别 作为安装孔时,焊盘和过孔在内孔覆铜上有区别,焊盘的内控通过设置属性可以没有覆铜,而过孔不可以.如果选中焊盘属性Adv ...
- position 小结
position: static fixed relative absolute sticky 1.static static定位是HTML元素的默认值,即没有定位,元素出现在正常的流中.因此,这种定 ...
- unity shader 常用函数列表
此篇博客转自csdn的一位大牛. 中间排版出了一些问题 Intrinsic Functions (DirectX HLSL) The following table lists the intrins ...
- 彻底搞懂CSS文本、空白换行问题
首先,我们来整理一下与换行有关的3个CSS属性: word-break 该属性决定文本内容超出容器时,浏览器是否自动插入换行符. 属性值: normal:默认换行规则——英文以词为单位换行,连续字符不 ...
- KVM虚拟机配置笔记
KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...
- JavaScript之DOM对象获取(1)
我们在操作html中的节点的时候,第一步就需要获取到对应节点(元素),才能有后续的操作.获取节点的方式有很多 1.document.getElementById(‘id值’) 通过id精确的选中某一个 ...
- 全面了解移动端DNS域名劫持等杂症:原理、根源、HttpDNS解决方案等
1.引言 对于互联网,域名是访问的第一跳,而这一跳很多时候会“失足”(尤其是移动端网络),导致访问错误内容.失败连接等,让用户在互联网上畅游的爽快瞬间消失. 而对于这关键的第一跳,包括鹅厂在内的国 ...