翻译自http://stackoverflow.com/questions/11754781/how-to-declare-a-variable-in-mysql
MySQL中主要有三种变量:
- User-defined variables (有前缀@)
- Local Variables (没有前缀)
- Server System Variables(有前缀@@)
1.User-defined variables用户变量
你可以获取任何用户自定义变量不需要事先声明或初始化。如果你获取还未初始化的变量,那么它的值为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;
用户变量可以被指定为下列这些有限的数据类型:
nteger, decimal, floating-point, binary or nonbinary string, or NULL value.
用户变量只可以被定义它的用户所使用。
2.Local Variables局部变量
局部变量使用前需要先通过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.Server System Variables
MySQL服务器有很多被配置为默认值的系统变量。这些系统变量包含全局类型的、会话的或者两者都有的。
全局变量会影响整个服务器的操作而为会话变量只影响个人客户端连接。
我们可以使用SHOW VARIABLES语句或SELECT @@var_name看到正在运行的服务器上当前所使用的变量。
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;