MySQL中主要有三种类型的变量:
1.用户定义的变量(前缀为@):
您可以访问任何用户定义的变量,而不声明它或初始化它。 如果引用尚未初始化的变量,则它的值为NULL,并且类型为字符串。
SELECT @var_any_var_name
您可以使用SET或SELECT语句初始化变量:
SET @start = 1, @finish = 10;
或者
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
用户变量可以从有限的数据类型集合中分配值:整数,小数,浮点数,二进制或非二进制字符串或NULL值。
用户定义的变量是会话特定的。 也就是说,由一个客户端定义的用户变量不能被其他客户端看到或使用。
2.局部变量(无前缀):
需要在访问局部变量之前使用DECLARE声明局部变量。
它们可以用作存储过程中的局部变量和输入参数:
DELIMITER //
CREATE PROCEDURE sp_test(var1 INT)
BEGIN
DECLARE start INT unsigned DEFAULT 1;
DECLARE finish INT unsigned DEFAULT 10;
SELECT var1, start, finish;
SELECT * FROM places WHERE place BETWEEN start AND finish;
END; //
DELIMITER ;
CALL sp_test(5);
如果缺少DEFAULT子句,则初始值为NULL。
局部变量的范围是在其中声明的BEGIN … END块。
3.服务器系统变量(以@@为前缀):
MySQL服务器维护许多系统变量配置为默认值。 它们可以是GLOBAL,SESSION或BOTH类型。
全局变量影响服务器的整体操作,而会话变量影响其对各个客户端连接的操作。
要查看正在运行的服务器使用的当前值,请使用SHOW VARIABLES语句或SELECT @@ var_name。
SHOW VARIABLES LIKE ‘%wait_timeout%’;
SELECT @@sort_buffer_size;
它们可以在服务器启动时使用命令行或选项文件中的选项进行设置。 大多数可以在服务器运行时使用SET GLOBAL或SET SESSION动态更改:
— Syntax to Set value to a Global variable:
SET GLOBAL sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000;
— Syntax to Set value to a Session variable:
SET sort_buffer_size=1000000;
SET SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@local.sort_buffer_size=10000;