如何在 MySQL 中声明一个变量?

2021-11-20 00:00:00 sql mysql

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

How to declare a variable in mysql, so that my second query can use it?

我想写一些类似的东西:

I would like to write something like:

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;

推荐答案

MySQL中主要有以下三种变量:

There are mainly three types of variables in MySQL:

  1. 用户定义的变量(前缀为@):

  1. User-defined variables (prefixed with @):

您可以访问任何用户定义的变量而无需声明或初始化它.如果你引用了一个没有被引用的变量初始化后,它的值为 NULL 和字符串类型.

You can access any user-defined variable without declaring it or initializing it. If you refer to a variable that has not been initialized, it has a value of NULL and a type of string.

SELECT @var_any_var_name

您可以使用 SETSELECT 语句初始化变量:

You can initialize a variable using SET or SELECT statement:

SET @start = 1, @finish = 10;    

SELECT @start := 1, @finish := 10;

SELECT * FROM places WHERE place BETWEEN @start AND @finish;

可以从一组有限的数据中为用户变量赋值类型:整数、十进制、浮点、二进制或非二进制字符串,或 NULL 值.

User variables can be assigned a value from a limited set of data types: integer, decimal, floating-point, binary or nonbinary string, or NULL value.

用户定义的变量是特定于会话的.也就是说,一个用户一个客户端定义的变量不能被其他客户端看到或使用客户.

User-defined variables are session-specific. That is, a user variable defined by one client cannot be seen or used by other clients.

它们可以在使用 SELECT 查询中使用/">高级 MySQL 用户变量技术.

They can be used in SELECT queries using Advanced MySQL user variable techniques.

局部变量(无前缀) :

Local Variables (no prefix) :

局部变量需要先用DECLARE声明访问它.

Local variables needs to be declared using DECLARE before accessing it.

它们可以用作局部变量和输入参数在存储过程中:

They can be used as local variables and the input parameters inside a stored procedure:

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.

If the DEFAULT clause is missing, the initial value is NULL.

局部变量的作用域是 BEGIN ... END 块内它被声明.

The scope of a local variable is the BEGIN ... END block within which it is declared.

服务器系统变量(前缀使用 @@):

Server System Variables (prefixed with @@):

MySQL 服务器维护了许多配置为默认值的系统变量价值.它们可以是 GLOBALSESSIONBOTH 类型.

The MySQL server maintains many system variables configured to a default value. They can be of type GLOBAL, SESSION or BOTH.

全局变量影响服务器的整体操作,而会话变量影响其对单个客户端连接的操作.

Global variables affect the overall operation of the server whereas session variables affect its operation for individual client connections.

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

To see the current values used by a running server, use the SHOW VARIABLES statement or SELECT @@var_name.

SHOW VARIABLES LIKE '%wait_timeout%';

SELECT @@sort_buffer_size;

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

They can be set at server startup using options on the command line or in an option file. Most of them can be changed dynamically while the server is running using 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;

相关文章