1. 分类
- 系统变量:全局变量,会话变量
- 自定义变量:用户变量,局部变量
2. 系统变量
说明
变量是由系统提供,不是用户定义,属于服务器层面
语法
- 查看所有的系统变量
-- 全局变量
SHOW GLOBAL VARIABLES ;
-- 会话变量(session可以省略)
SHOW SESSION VARIABLES ;
- 查看满足条件的部分系统变量
SHOW GLOBAL VARIABLES LIKE '%char%' ;
- 查看指定的某个系统变量
SELECT
@@global.character_set_server ;
- 为某个具体的系统变量赋值
SET GLOBAL autocommit = 0 ;
SET @@global.autocommit = 0 ;
总结
全局变量需要加global关键字,不加关键字默认为会话变量。
服务器每次启动将会为所有的全局变量赋初始值,修改的值对所有的连接都有效,但是不能跨重启。
会话变量仅针对于当前会话有效
3. 自定义变量
说明
变量是用户自定义,不由系统给出
用户变量
- 作用域
针对于当前会话有效,同于会话变量的作用域,应用于任何位置都可以,无需定义类型 - 声明并初始化(更新)
SET @dudu1 = 567 ;
SET @dudu2 := 678 ;
SELECT
@dudu3 := 789 ;
SELECT
COUNT(*) INTO @num
FROM
`employees` ;
- 查看
SELECT
@num ;
局部变量
- 作用域
仅仅在定义的begin end中有效,应用在begin end中并且必须是第一条语句,需要声明类型 - 声明
DECLARE dudu INT ;
DECLARE dudu INT DEFAULT 123 ;
- 赋值
SET dudu1 = 567 ;
SET dudu2 := 678 ;
SELECT
@dudu3 := 789 ;
SELECT
COUNT(*) INTO num
FROM
`employees` ;
- 使用
SELECT
num ;
案例:声明两个变量并赋值,求和
- 用户变量
SET @dudu := 1 ;
SET @zhou := 2 ;
SET @sum := @dudu + @zhou ;
SELECT
@sum ;
- 局部变量
DECLARE dudu INT 1 ;
DECLARE zhou INT 2 ;
DECLARE `sum` ;
SET `sum` = dudu + zhou ;
SELECT
`sum` ;