zoukankan      html  css  js  c++  java
  • 翻译:用户变量(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。要设置一个用户变量,可以使用以下几种方式:

    由于无法声明用户变量的类型,唯一能够强制它们类型的方式是使用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;
    
  • 相关阅读:
    poj 2337 欧拉回路输出最小字典序路径 ***
    hdu 4831
    hdu 4832 dp ***
    hdu 4833 离散化+dp ****
    hdu 4006 优先队列 2011大连赛区网络赛F **
    hdu 4005 双联通 2011大连赛区网络赛E *****
    hdu 4004 二分 2011大连赛区网络赛D
    hdu 4003 树形dp+分组背包 2011大连赛区网络赛C
    hdu 4002 欧拉函数 2011大连赛区网络赛B
    跨域经验总结
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/8620915.html
Copyright © 2011-2022 走看看