zoukankan      html  css  js  c++  java
  • MySQL中变量的总结

    本文对MySQL中局部变量、用户变量、系统变量的理解进行总结。

    一、局部变量

    局部变量由DECLARE语句声明:

    DECLARE var_name[,...] type [DEFAULT value]

    默认值由DEFAULT子句来声明,默认值也可以是一个表达式。

    局部变量的作用范围仅限在它被声明的BEGIN...END块内,当语句执行完毕,局部变量就消失了。

    二、用户变量

    可以先在用户变量中保存值然后在以后引用它;这样可以将值从一个语句传递到另一个语句。用户变量与连接有关。也就是说,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。用户变量名对大小写不敏感!

    对用户变量的定义有两种方式:

    第一种是执行SET语句

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

    对于SET,可以使用=或:=作为分配符。分配给每个变量的expr可以为整数、实数、字符串或者NULL值。

    第二种是使用SELECT语句

    使用SELECT定义用户变量只能使用:=作为分配符(因为在非SET语句中 = 被视为一个‘比较操作符’)

    mysql> SET @t1=0, @t2=0, @t3=0;
    mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
    +----------------------+------+------+------+
    | @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2  | @t3  |
    +----------------------+------+------+------+
    |                    5 |    5 |    1 |    4 |
    +----------------------+------+------+------+

    三、系统变量

    MySQL服务器维护两种变量:全局变量影响服务器整体操作;会话变量影响具体客户端连接的操作。

    1、全局变量

    当服务器启动时,它将所有全局变量初始化为默认值。这些默认值可以在配置文件(my.ini)中或在命令行中指定的选项进行更改。服务器启动后,通过连接服务器并执行SET GLOBAL var_name语句,可以动态更改这些全局变量。要想更改全局变量,必须具有SUPER权限。

    要想设置一个GLOBAL变量的值,使用下面的语法:

    mysql> SET GLOBAL sort_buffer_size=value;
    mysql> SET @@global.sort_buffer_size=value;

    要想查看一个GLOBAL变量的值,使用下面的语法:

    mysql> SELECT @@global.sort_buffer_size;
    mysql> SHOW GLOBAL VARIABLES like 'sort_buffer_size';

    2、会话变量

    服务器还为每个连接的客户端维护一系列会话变量。在连接时使用相应全局变量的当前值对客户端的会话变量进行初始化。对于动态会话变量,客户端可以通过SET SESSION var_name语句更改它们。设置会话变量不需要特殊权限,但客户端只能更改自己的会话变量,而不能更改其它客户端的会话变量。当前连接断开后,其设置的所有会话变量均

    会自动释放

    要想设置一个SESSION变量的值,使用下面的语法:

    mysql> SET SESSION sort_buffer_size=value;
    mysql> SET @@session.sort_buffer_size=value;
    mysql> SET sort_buffer_size=value;

    要想查看一个SESSION变量的值,使用下面的语法:

    mysql> SELECT @@sort_buffer_size;
    mysql> SELECT @@session.sort_buffer_size;
    mysql> SHOW SESSION VARIABLES like 'sort_buffer_size';

    注意:

    • 对于全局变量的更改可以被访问该全局变量的任何客户端看见。然而,它只影响更改后连接的客户的从该全局变量初始化的相应会话变量。不影响目前已经连接的客户端的会话变量(即使客户端执行SET GLOBAL语句也不影响)。
    • 当你用SELECT @@var_name搜索一个变量时(也就是说,不指定global.、session.),MySQL返回SESSION值(如果存在),否则返回GLOBAL值。
    • 对于SHOW VARIABLES,如果不指定GLOBAL、SESSION或者LOCAL,MySQL返回SESSION值。

    通用的赋值方式:

    SELECT...INTO语句

    SELECT col_name[,...] INTO var_name[,...] table_expr

    这个SELECT语法把选定的列直接存储到变量

    四、用户变量与会话变量的区别:

    用户变量是用户定义的变量,是MySQL服务器定义和维护的变量,所以用户变量和会话变量之间的区别在于,是谁在维护这些变量。用户变量和系统会话变量在当前客户端退出后都会自动释放。而系统会话变量的不通之处在于,在客户端建立连接时会创建一系列会话变量,并以全局变量的当前值初始化会话变量(会话变量相当于系统全局变量的副本),对系统会话变量的操作修改仅对当前客户端产生影响,并不会修改系统全局变量。自定义的会话变量的特性与用户变量就没有什么区别了。

    (个人参考MySQL文档的理解和总结,若有问题请指正,谢谢)

  • 相关阅读:
    javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码
    windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况
    javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url
    ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
    HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
    Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制
    linq查询语句转mongodb
    winddows rabbitmq安装与配置
    Redis For Windows安装及密码
    出现,视图必须派生自 WebViewPage 或 WebViewPage错误解决方法
  • 原文地址:https://www.cnblogs.com/thunderLL/p/6602585.html
Copyright © 2011-2022 走看看