如何使用MySQL中的临时变量?

MySQL中的临时变量用于存储 intermediates结果或者在存储过程和触发器中使用。它有以下几种类型:

  1. 用户变量:以@开头,作用域为当前会话。
sql
SET @var = 1;  # 赋值
SELECT @var;   # 使用
  1. 局部变量:只在BEGIN/END块中有效,用于存储过程和触发器中。
sql
BEGIN
    DECLARE name VARCHAR(20); 
    DECLARE age INT;  
END;  
  1. 活动环境上下文内的变量:作用域为BEGIN/END块,可以跨存储过程/触发器调用。
sql
BEGIN 
    SET @var = 1;  
END; 

# 其他存储过程/触发器中可以使用@var
  1. 局部活动环境上下文内的变量:只在定义处的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

临时变量的主要作用:

  1. 存储过程、函数和触发器间传递数据。
  2. 避免SQL语句动态生成时的SQL注入问题。
  3. 使程序具有一定的逻辑处理能力。