如何在mysql中声明一个变量,以便我的第二个查询可以使用它?
我想写一些类似的东西:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
MySQL中的变量主要分为三类:
-
用户定义变量 http://dev.mysql.com/doc/refman/5.0/en/user-variables.html(前缀为@
):
您可以访问任何用户定义的变量而无需声明它或
初始化它。如果你引用了一个没有被引用过的变量
初始化后,它的值为NULL
和一种字符串。
SELECT @var_any_var_name
您可以使用以下方式初始化变量SET
or SELECT
陈述:
SET @start = 1, @finish = 10;
or
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
可以为用户变量分配有限数据集中的值
类型:整数、小数、浮点、二进制或非二进制字符串,
或 NULL 值。
用户定义的变量是特定于会话的。也就是说,一个用户
一个客户端定义的变量不能被其他客户端看到或使用
客户。
它们可用于SELECT
查询使用高级 MySQL 用户变量技术 http://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/.
-
局部变量 http://dev.mysql.com/doc/refman/5.0/en/declare-local-variable.html(无前缀):
局部变量需要使用声明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);
If the DEFAULT
缺少子句,初始值为NULL
.
局部变量的作用域是BEGIN ... END
块内
它是这样声明的。
-
服务器系统变量 https://dev.mysql.com/doc/refman/5.5/en/using-system-variables.html(前缀为@@
):
MySQL服务器维护着许多系统变量 https://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html配置为默认值。
它们可以是类型GLOBAL
, SESSION
or BOTH
.
全局变量影响服务器的整体操作,而会话变量影响单个客户端连接的操作。
要查看正在运行的服务器使用的当前值,请使用SHOW VARIABLES
声明或SELECT @@var_name
.
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;
它们可以在服务器启动时使用命令行或选项文件中的选项进行设置。
其中大多数可以在服务器运行时动态更改SET GLOBAL
or 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)