用户定义的变量(前缀为@):
您可以访问任何用户定义的变量,而无需声明或初始化它。如果引用尚未初始化的变量,则其值为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服务器维护许多配置为默认值的系统变量。它们可以是类型GLOBAL
,SESSION
或BOTH
。
全局变量会影响服务器的整体操作,而会话变量会影响其对各个客户端连接的操作。
要查看正在运行的服务器使用的当前值,请使用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;