mysql用户变量与set语句示例详解

2022-05-21 0 809
目录
  • 1 用户变量介绍
  • 2 用户变量定义
  • 3 用户变量的使用
    • 3.1 通过set的实例
    • 3.2 通过select的实例
  • 4 用户变量注意事项
    • 5 补充知识:mysql语句do
      • 总结

        1 用户变量介绍

        用户变量即用户自己定义的变量,我们可以给用户变量分配值,并且可用在任何可以正常使用标量表达式的地方。

        引入用户变量之前我们必须使用set语句或select语句来定义它,然后为它赋一个值,否则变量就只有一个空值。

        用户变量与连接有关。也就是说,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。

        2 用户变量定义

        set语句可用于向系统变量或用户变量赋值,针对用户变量的定义如下:

        SET @var_name = expr [, @var_name = expr] ...

        也可使用select语句来定义:

        SELECT @var_name := expr [, @var_name = expr] ...

        用户变量:以”@”开始,形式为”@var_name”,以区分用户变量及列名。它可以是任何随机的,复合的标量表达式,只要其中没有列指定。

        一个变量名可以由当前字符集的数字字母字符和“_”、“$”和“.”组成。缺省字符集是ISO-8859-1 Latin1;这可以用mysqld 的–default-character-set 选项更改字符集。

        对于SET,可以使用=或:=来赋值,对于SELECT只能使用:=来赋值。

        我们可以使用一条简单的select语句查询定义的用户变量的值。

        3 用户变量的使用

        3.1 通过set的实例

        用来把一个值赋给一个变量的标量表达式可以是复合表达式。计算,函数,系统标量以及其他用户变量都是允许的,子查询也是允许的。然后通过select语句可以获取一个用户变量的值,结果是带有一行的一个表。

        mysql> set @var1=1, @var2='vartest', @var3=abs(-2), @var4=(select count(*) from mysql.user);
        mysql> select @var1, @var2, @var3, @var4;
        +-------+---------+-------+-------+
        | @var1 | @var2 | @var3 | @var4 |
        +-------+---------+-------+-------+
        |  1 | vartest |  2 | 25 |
        +-------+---------+-------+-------+

        在用来为一个用户变量赋值的表达式中,也可以指定其它的用户变量,需要注意的是mysql首先确定所有表达式的值,之后才会把值赋给变量。

        例如:

        mysql> set @varA = 2; 

        对于下面两个例子,varB的值是不同的。

        例1:

        mysql> set @varA = 3, @varB = @varA;
        mysql> select @varB;
        +-------+
        | @varB |
        +-------+
        |  2 |
        +-------+

        例2:

        mysql> set @varA = 3; 
        mysql> set @varB = @varA;
        mysql> select @varB;            
        +-------+
        | @varB |
        +-------+
        |  3 |
        +-------+

        mysql用户变量与set语句示例详解    

        3.2 通过select的实例

        相对set语句而言,使用select定义变量,会返回一个表格形式的结果。

        mysql> select @var1:=1, @var2:='vartest', @var3:=abs(-2), @var4:=(select count(*) from mysql.user);
        +----------+------------------+----------------+------------------------------------------+
        | @var1:=1 | @var2:='vartest' | @var3:=abs(-2) | @var4:=(select count(*) from mysql.user) |
        +----------+------------------+----------------+------------------------------------------+
        |    1 | vartest     |       2 |                    25 |
        +----------+------------------+----------------+------------------------------------------+
        mysql> select @var1, @var2, @var3, @var4;
        +-------+---------+-------+-------+
        | @var1 | @var2  | @var3 | @var4 |
        +-------+---------+-------+-------+
        |   1 | vartest |   2 |  25 |
        +-------+---------+-------+-------+
        +-------+---------+-------+-------+
        |   1 | vartest |   2 |  25 |
        +-------+---------+-------+-------+

        mysql用户变量与set语句示例详解

        4 用户变量注意事项

        4.1 用户变量用在where或having子句中,他们必须首先用另一条语句来定义,如下面例子,初次查询没有返回结果,先定以后在查询才有输出。

        mysql> select @H:='localhost' from mysql.user where host = @H;
        Empty set (0.00 sec)
        mysql> select @H:='localhost';
        +-----------------+
        | @H:='localhost' |
        +-----------------+
        | localhost    |
        +-----------------+
        1 row in set (0.00 sec)
        mysql> select @H:='localhost', user from mysql.user where host = @H;
        +-----------------+-----------------+
        | @H:='localhost' | user      |
        +-----------------+-----------------+
        | localhost    |         |
        | localhost    | jesse      |
        | localhost    | local      |
        | localhost    | root      |
        | localhost    | user_tab_update |
        +-----------------+-----------------+

        4.2 用户变量为session级别,当我们关闭客户端或退出登录时用户变量全部消失。如果想用就保存自定义的变量,需要自行创建一个表,将标量insert到表里。

        4.3 用户变量名对大小写不敏感。

        4.4 未定义的变量初始化是null。

        5 补充知识:mysql语句do

        在do语句中,使用了一个或多个标量表达式,mysql会一条一条的处理它们,但并不显示表达式的结果。例如我们可以调用函数执行后台的某些事情,而不需要看到其结果。

        例如:

        mysql> do sleep(5);
        Query OK, 0 rows affected (5.00 sec)

        总结

        到此这篇关于mysql用户变量与set语句的文章就介绍到这了,更多相关mysql用户变量与set语句内容请搜索NICE源码以前的文章或继续浏览下面的相关文章希望大家以后多多支持NICE源码!

        免责声明:
        1、本网站所有发布的源码、软件和资料均为收集各大资源网站整理而来;仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

        2、本站信息来自网络,版权争议与本站无关。一切关于该资源商业行为与www.niceym.com无关。
        如果您喜欢该程序,请支持正版源码、软件,购买注册,得到更好的正版服务。
        如有侵犯你版权的,请邮件与我们联系处理(邮箱:skknet@qq.com),本站将立即改正。

        NICE源码网 MySql mysql用户变量与set语句示例详解 https://www.niceym.com/42267.html