翻译:用户变量(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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移植Python3到TQ2440(一)

平台 硬件:TQ2440 64MB内存 256MB NandFlashbootloader:U-Boot 2015.04kernel:linux-4.9Python: Python-3.6.0工具链:arm-none-linux-gnueabi-gcc 4.8.3概述 现在树莓派很火,在树莓派上面用户可以通过Python来控制板…

WinForm(六)组合布局属性

WinForm是基于控件的,不像codemark的架构,可以非常灵活的用mark来布局,它只能用控件布局属性和窗口控件来完成对UI的布局。容器控件有一组控件叫容器控件,对布局特别有作用,它们分别是:TableLayoutPanel&am…

Qt 网络编程

QT 网络编程 TCP 编程 模块引入 QT network 头文件 #include <QTcpServer> // TCP服务器端使用 #include <QTcpSocket> // TCP服务器和客户端都使用 编程流程 服务端 1&#xff09;实例化 QTcpServer 对象 -----------------------------> socket 2&#x…

HDU 5037 Frog(2014年北京网络赛 F 贪心)

开始就觉得有思路&#xff0c;结果越敲越麻烦。。。   题意很简单&#xff0c;就是说一个青蛙从0点跳到m点&#xff0c;最多可以跳l的长度&#xff0c;原有石头n个&#xff08;都仅表示一个点&#xff09;。但是可能跳不过去&#xff0c;所以你是上帝&#xff0c;可以随便在哪…

Kafka高性能高吞吐的原因总结

1、磁盘顺序读写 保证了消息的堆积 顺序读写 磁盘会预读,预读即在读取的起始地址连续读取多个页面&#xff0c;主要时间花费在了传输时间,而这个时间两种读写可以认为是一样的。 随机读写 因为数据没有在一起&#xff0c;将预读浪费掉了&#xff0c;需要多次寻道和旋…

日利率

2019独角兽企业重金招聘Python工程师标准>>> 利率计算 转载于:https://my.oschina.net/u/3342652/blog/1649028

linux下使用tar命令

解压语法&#xff1a;tar [主选项辅选项] 文件或者目录 使用该命令时&#xff0c;主选项是必须要有的&#xff0c;它告诉tar要做什么事情&#xff0c;辅选项是辅助使用的&#xff0c;可以选用。主选项&#xff1a;c 创建新的档案文件。如果用户想备份一个目录或是一些文件&…

Kafka 安装详解

注意&#xff1a;确保有JDK1.8版本及以上 官方文档&#xff1a;https://kafka.apache.org/quickstart 清华镜像下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/ 首先下载安装包&#xff0c;在linux及Windows都可以使用。 1. Centos 安装部署 1.1 下载 将下…

【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示...

前言&#xff1a;Maui终于在2022年8月9日推送出来了。今儿就迫不及待来把玩一下先。A、我本地已有VS2022&#xff0c;不过版本比较老&#xff0c;此处选择更新。工具 -> 获取功能和更新里面&#xff0c;可以获取到新版本更新。B、最新版本是17.3.0&#xff0c;我本地只有17.…

学go语言能做什么工作?

Go语言主要用作服务器端开发&#xff0c;其定位是用来开发“大型软件”的&#xff0c;适合于很多程序员一起开发大型软件&#xff0c;并且开发周期长&#xff0c;支持云计算的网络服务。Go语言能够让程序员快速开发&#xff0c;并且在软件不断的增长过程中&#xff0c;它能让程…

WebSQL存储

2019独角兽企业重金招聘Python工程师标准>>> WebSQL这种存储技术&#xff0c;相对于学过数据库的人来说&#xff0c;还是比较容易理解和上手的&#xff0c;主要就是它的存储风格和我们一般所学的SQL Server 和Oracle比较像&#xff0c;对于HTML5来说&#xff0c;当然…

软件工程第一次作业补充

1.关注《构建之法》的作者邹欣老师的博客&#xff1b;2.花二十分钟写一个能自动生成小学四则运算题目的“软件”&#xff0c;要求除了整数以外&#xff0c;还要支持真分数的四则运算。将代码上传至coding.net,并将地址发布至自己的博客。代码地址&#xff1a; https://coding.n…

抖音服务器带宽有多大,才能供上亿人同时刷?

最近看到一个有意思的提问&#xff1a;抖音服务器带宽有多大&#xff0c;为什么能够供那么多人同时刷&#xff1f;今天来给小伙伴们科普一下。 抖音&#xff0c;百度&#xff0c;阿里云&#xff0c;腾讯都是自建的数据中心&#xff0c;都是 T 级别出口带宽&#xff08;总出口带…

ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程

通过Rider调试的方式看了下ASP.NET Core 5.0的Web API默认项目&#xff0c;重点关注Host.CreateDefaultBuilder(args)中的执行过程&#xff0c;主要包括主机配置、应用程序配置、日志配置和依赖注入配置这4个部分。由于水平和篇幅有限&#xff0c;先整体理解、建立框架&#xf…

404和302

为什么80%的码农都做不了架构师&#xff1f;>>> 404 php中用header()函数是可以为返回页面添加404的头信息的&#xff0c;从而提示浏览器该网页找不到了。 所以可以使用&#xff1a;header("HTTP/1.0 404 Not Found");或者&#xff1a;header("Stat…

oracle sqlplus使用

2019独角兽企业重金招聘Python工程师标准>>> 1、常用连接方式 sqlplus / as sysdba 无需数据库进入可用状态&#xff0c;就可用用该命令登录&#xff0c;运行startup来启动。 sqlplus username/pwdhost/service_name&#xff0c;如&#xff1a; sqlplus tiger/scott…

20款IDEA 神级插件 效率提升 30 倍,写代码必备

插件目录 1. Alibaba Java Coding Guidelines 2.GsonFormat 3.A8Translation 4.Maven Helper 5.Free Mybatis plugin 6.Grep Console 7.Lombok 8.Nyan progress bar 9.FindBugs-IDEA 10.Key Promoter X 11.JavaDoc 12.ignore 13.RainbowBrackets 14.Activate-power-mode 15.C…

【温故知新】C# Linq中 Where使用技巧

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码 后台回复 源码 即可;如果觉得对你有帮助&#xff0c;欢迎关注C# Linq中 Where使用技巧hello 大家好&#xff0c;很开心又能重新分享C#编程开发技巧了&#xff0c;之前因为工作和生活…

JS引用类型 -- Array类型

ECMAScript数组与其他语言中的数组都是数据的有序列表&#xff0c;但与其他语言不同的是&#xff0c;ECMAScript数组的每一项可以保存任何类型的数据。而且ECMAScript数组的大小是可以动态调整的&#xff0c;即可以随着数据的添加自动增长。 创建数组的基本方式有两种&#xff…

分布式id解决方案

文章目录 1.分布式id实现方案 1.1.uuid1.2 数据库主键自增1.3 Redis自增1.4 号段模式1.5 雪花算法&#xff08;snowflake&#xff09; 1.5.1 百度&#xff08;uid-generator&#xff09;1.5.2 美团&#xff08;Leaf&#xff09;所谓id就是能够用作唯一标识的记号。 在我们日常的…