如何在MySQL中声明一个variables?
如何在mysql中声明一个variables,以便我的第二个查询可以使用它?
我想写一些类似的东西:
SET start = 1; SET finish = 10; SELECT * FROM places WHERE place BETWEEN start AND finish;
MySQL中主要有三种types的variables:
-
用户定义的variables (以
@
开头):您可以访问任何用户定义的variables而不用声明或初始化它。 如果引用一个尚未初始化的variables,则它的值为
NULL
和一个stringtypes。SELECT @var_any_var_name
您可以使用
SET
或SELECT
语句初始化一个variables:SET @start = 1, @finish = 10;
要么
SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
用户variables可以从一组有限的数据types中分配一个值:整型,十进制,浮点型,二进制或非二进制string或NULL值。
用户定义的variables是会话特定的。 也就是说,一个客户端定义的用户variables不能被其他客户端看到或使用。
它们可以在使用高级MySQL用户variables技术的
SELECT
查询中使用。 -
局部variables (无前缀):
局部variables在访问之前需要用
DECLARE
声明。它们可以用作局部variables和存储过程中的input参数:
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);
如果缺less
DEFAULT
子句,则初始值为NULL
。局部variables的作用域是声明它的
BEGIN ... END
块。 -
服务器系统variables (前缀为
@@
):MySQL服务器维护许多configuration为默认值的系统variables 。 他们可以是
GLOBAL
,SESSION
或两种types。全局variables影响服务器的整体操作,而会话variables影响其对各个客户端连接的操作。
要查看正在运行的服务器使用的当前值,请使用
SHOW VARIABLES
语句或SELECT @@var_name
。SHOW VARIABLES LIKE '%wait_timeout%'; SELECT @@sort_buffer_size;
可以在服务器启动时使用命令行选项或选项文件来设置它们。 它们中的大多数可以在服务器运行时使用
SET GLOBAL
或SET SESSION
dynamic更改:-- 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;
使用设置或select
SET @counter := 100; SELECT @variable_name := value;
例如:
SELECT @price := MAX(product.price) FROM product
组
SET @var_name = value
要么
SET @var := value
运营商=和:=都被接受
select
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
如果多个logging集只发现col2中的最后一个值是keep(覆盖);
SELECT col1, col2 INTO @var_name, col3 FROM .....
在这种情况下,select的结果不包含col2值
DECLARE var_name [,var_name] … type [DEFAULT value]这个语句声明stored procedures中的局部variables。
防爆。 DECLARE id INT unsigned DEFAULT 1;
要为variables提供默认值,请包含DEFAULT子句。 该值可以被指定为一个expression式; 它不一定是一个常数。 如果缺lessDEFAULT子句,则初始值为NULL。
就数据types和溢出检查而言,局部variables被视为存储的例程参数。
variables声明必须出现在游标或处理程序声明之前。
局部variables名称不区分大小写。 允许的字符和引用规则与其他标识符相同
局部variables的作用域是声明它的BEGIN … END块。 variables可以在嵌套在声明块中的块中引用,除了声明具有相同名称的variables的块之外。