1. 变量
在MySQL中,变量分为系统变量与用户自定义变量.系统变量又包括全局系统变量与会话系统变量. 而用户自定义变量又包括会话用户变量与局部变量.
2. 系统变量
(1). 系统变量
变量由系统定义,属于服务器层面. 启动MySQL服务,生成MySQL服务实例期间,MySQL将为MySQL服务器内存中的系统变量赋值,这些变量定义了当前MySQL服务实例的属性和特征.
(2). 全局系统变量
全局系统变量需要添加GLOBAL关键字.如果不写,则默认会话系统变量.静态变量属于特殊的全局系统变量.
(3). 会话系统变量
每个MySQL客户机成功连接MySQL服务器后,都会产生与之对应的会话. 会话期间,MySQL服务实例会在MySQL服务器内存中生成与该会话对应的会话系统变量.
3. 查看系统变量
(1). 查看全局系统变量与会话系统变量
# 查看全局系统变量 SHOW GLOBAL VARIABLES; # 查看会话系统变量 SHOW SESSION VARIABLES;
(2). 指定系统变量
MySQL中的系统变量以"@@"开头. 全局系统变量以"@@GLOBAL."开头,会话系统变量以"@@SESSION."开头.如果执行是"SELECT @@变量名",首先标记会话系统变量,如果会话系统变量不存在,则标记全局系统变量.
3. 用户变量
(1). 用户变量
用户变量是用户自己定义的.根据作用范围,分为会话用户变量与局部变量.会话用户变量作用域在当前连接会话中有效.其以"@"开头.局部变量只在存储过程或函数中的BEGIN ... END语块中有效,其需要用DECLARE声明.
(2). 会话用户变量
SET @manbaout = 110; SELECT @manbaout;
(3). 局部变量
CREATE PROCEDURE proce_id() BEGIN # 局部变量 DECLARE emp_id INT DEFAULT 0; SET emp_id = 110; SELECT salary FROM employees WHERE employee_id = emp_id; END; CALL proce_id();
(4). 对比会话用户变量和局部变量
(1). 作用域
- 会话用户变量作用域为当前连接的会话.
- 局部变量的作用域为定义它的BEGIN ... END语块中.
(2). 定义位置
- 会话用户变量可以定义在当前会话的任意位置.
- 局部变量必须定义在BEGIN ... END语块的第一句话.
(3). 语法
- 会话用户变量需要加"@"符号,不用指定类型.
- 局部变量不需要加"@",但需要DECLARE声明,且在变量名后面添加变量类型,必须时还可以添加默认值DEFAULT 默认值.