如何在mysql中声明一个变量,以便我的第二个查询可以使用它?
我想写一些类似的东西:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
Run Code Online (Sandbox Code Playgroud)
Ome*_*esh 582
MySQL中主要有三种变量:
用户定义的变量(前缀为@):
您可以访问任何用户定义的变量,而无需声明或初始化它.如果引用尚未初始化的变量,则其值为NULL和字符串类型.
SELECT @var_any_var_name
Run Code Online (Sandbox Code Playgroud)
您可以使用SET或SELECT语句初始化变量:
SET @start = 1, @finish = 10;
Run Code Online (Sandbox Code Playgroud)
要么
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
Run Code Online (Sandbox Code Playgroud)
可以从一组有限的数据类型为用户变量分配值:整数,十进制,浮点,二进制或非二进制字符串或NULL值.
用户定义的变量是特定于会话的.也就是说,其他客户端无法看到或使用由一个客户端定义的用户变量.
它们可以在SELECT使用Advanced MySQL用户变量技术的查询中使用.
局部变量(无前缀):
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);
Run Code Online (Sandbox Code Playgroud)
如果DEFAULT缺少该子句,则初始值为NULL.
局部变量的BEGIN ... END范围是声明它的块.
服务器系统变量(前缀@@):
MySQL服务器维护许多配置为默认值的系统变量.它们可以是类型GLOBAL,SESSION或BOTH.
全局变量会影响服务器的整体操作,而会话变量会影响其对各个客户端连接的操作.
要查看正在运行的服务器使用的当前值,请使用SHOW VARIABLES语句或SELECT @@var_name.
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;
Run Code Online (Sandbox Code Playgroud)
可以使用命令行或选项文件中的选项在服务器启动时设置它们.在服务器运行时,大多数都可以动态更改SET GLOBAL或使用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;
Run Code Online (Sandbox Code Playgroud)bor*_*nac 25
组
SET @var_name = value
Run Code Online (Sandbox Code Playgroud)
要么
SET @var := value
Run Code Online (Sandbox Code Playgroud)
operator =和:=都被接受
选择
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
Run Code Online (Sandbox Code Playgroud)
如果找到多个记录集只有col2中的最后一个值是keep(override);
SELECT col1, col2 INTO @var_name, col3 FROM .....
Run Code Online (Sandbox Code Playgroud)
在这种情况下,select的结果不包含col2值
Kou*_*zdi 13
使用设置或选择
SET @counter := 100;
SELECT @variable_name := value;
Run Code Online (Sandbox Code Playgroud)
例如:
SELECT @price := MAX(product.price)
FROM product
Run Code Online (Sandbox Code Playgroud)
小智 8
不同类型的变量:
DECLARE 只允许在 BEGIN ... END 复合语句中使用,并且必须在其开头,在任何其他语句之前。
因此,如果您正在定义一个存储程序并且确实需要一个“局部变量”,您将需要删除 @ 字符并确保您的 DECLARE 语句位于程序块的开头。否则,要使用“用户变量”,请删除 DECLARE 语句。
此外,您需要将查询括在括号中,以便将其作为子查询执行:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
否则,您可以使用 SELECT ... INTO:
SELECT COUNT(*) INTO @countTotal FROM nGrams;
| 归档时间: |
|
| 查看次数: |
585577 次 |
| 最近记录: |