MySQL中的临时变量用于存储 intermediates结果或者在存储过程和触发器中使用。它有以下几种类型:
- 用户变量:以@开头,作用域为当前会话。
sql
SET @var = 1; # 赋值
SELECT @var; # 使用
- 局部变量:只在BEGIN/END块中有效,用于存储过程和触发器中。
sql
BEGIN
DECLARE name VARCHAR(20);
DECLARE age INT;
END;
- 活动环境上下文内的变量:作用域为BEGIN/END块,可以跨存储过程/触发器调用。
sql
BEGIN
SET @var = 1;
END;
# 其他存储过程/触发器中可以使用@var
- 局部活动环境上下文内的变量:只在定义处的BEGIN/END块有效。
sql
BEGIN
DECLARE name VARCHAR(20);
END;
# 其他BEGIN/END块中无法使用name变量
用户变量和局部变量需要先定义后使用,不能重复定义,作用域结束后自动释放。
例1:用户变量
sql
SET @age = 30;
SELECT * FROM users WHERE age = @age;
例2:局部变量
sql
CREATE PROCEDURE getUsers()
BEGIN
DECLARE name VARCHAR(20);
SET name = 'John';
SELECT * FROM users WHERE name = name;
END
临时变量的主要作用:
- 存储过程、函数和触发器间传递数据。
- 避免SQL语句动态生成时的SQL注入问题。
- 使程序具有一定的逻辑处理能力。