MySQL 变量类型

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

您可以访问任何用户定义的变量,而无需声明或初始化它。如果引用尚未初始化的变量,则其值为NULL和字符串类型。

select @now2;
NULL

set赋值:

set @num=0;
-- select count(1) from hs_draw_info where unify_loan_account is not null into @num;
select count(1) into @num from hs_draw_info where unify_loan_account is not null;
select @num;

select赋值:

select now() into @now;
select @now;

2019-02-20 13:44:21

或者

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

select使用:=也可以实现赋值

用户定义的变量是特定于会话的。也就是说,其他客户端无法看到或使用由一个客户端定义的用户变量。

局部变量(无前缀):

DECLARE在访问本地变量之前,需要声明它们。

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

如果缺少default,默认初始化为NULL

delimiter $$
drop procedure if exists pro $$
create procedure pro()
begin
   declare num int default 0;
     select count(1) from hs_draw_info where unify_loan_account is not null into num;
     select num;
end $$
delimiter ;
call pro();

上面的num就是局部变量。

局部变量的BEGIN ... END范围是声明它的块。

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

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

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

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

SHOW VARIABLES LIKE '%wait_timeout%';

SELECT @@sort_buffer_size;

可以使用命令行或选项文件中的选项在服务器启动时设置它们。在服务器运行时,大多数都可以动态更改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;

参考:

如何在MySQL中声明变量?

13.7.4.1变量赋值的SET语法

原文地址:https://www.cnblogs.com/hongdada/p/10406174.html