如何在MySQL中声明一个variables?

如何在mysql中声明一个variables,以便我的第二个查询可以使用它?

我想写一些类似的东西:

SET start = 1; SET finish = 10; SELECT * FROM places WHERE place BETWEEN start AND finish; 

MySQL中主要有三种types的variables:

  1. 用户定义的variables (以@开头):

    您可以访问任何用户定义的variables而不用声明或初始化它。 如果引用一个尚未初始化的variables,则它的值为NULL和一个stringtypes。

     SELECT @var_any_var_name 

    您可以使用SETSELECT语句初始化一个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查询中使用。

  2. 局部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); 

    如果缺lessDEFAULT子句,则初始值为NULL

    局部variables的作用域是声明它的BEGIN ... END块。

  3. 服务器系统variables (前缀为@@ ):

    MySQL服务器维护许多configuration为默认值的系统variables 。 他们可以是GLOBALSESSION或两种types。

    全局variables影响服务器的整体操作,而会话variables影响其对各个客户端连接的操作。

    要查看正在运行的服务器使用的当前值,请使用SHOW VARIABLES语句或SELECT @@var_name

     SHOW VARIABLES LIKE '%wait_timeout%'; SELECT @@sort_buffer_size; 

    可以在服务器启动时使用命令行选项或选项文件来设置它们。 它们中的大多数可以在服务器运行时使用SET GLOBALSET SESSIONdynamic更改:

     -- 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的块之外。