SQL变量, since 2021-12-20

(2021.12.20 Mon)
SQL中的变量分为user-defined variable, local variable和system variables.

User-defined Variable(UDV)

用户定义变量仅供一位用户使用,不能被其他用户使用。UDV在声明和使用时需要在前面加上@符号。UDV也叫会话变量(session variable)。

设置UDV可使用SETSELECT指令。注意到使用SELECT指令赋值时,赋值符号为:=

SET @var1 = 1, @var2 = 2;
SELECT @var3 := 3, @var4 := 4;
SET @var6 = CAST(b'1000001' AS UNSIGNED);
SET @var7 = b'1000001';

UDV可定义的数据类型包括integer, decimal, floating-point, binary or nonbinary string, or NULL value。

调用方法

SELECT place FROM table1 WHERE var_s BETWEEN @var3 AND @var4;

可在没有声明的情况下直接调用则返回NULL

SELECT @var5;

局部变量Local Variables

局部变量用DECLARE声明,并标明默认值用DEFAULT。如果没有指定默认值,则默认为NULL

局部变量用于存储过程,其作用域是BEGIN...END标记的范围。

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 ;

mysql > CALL sp_test(5);

System Variables

(2021.12.21 Tues)
系统变量,也叫全局变量。对所有客户端生效,只有super权限才能修改系统变量。其定义格式为

SET GLOBAL = ;
SET @@global. = ;

对系统变量可以通过表达式赋值,但是需要注意,服务器已经启动后(server runtime)使用SET赋值时可以使用乘号(*)等符号。而在服务器启动时(server startup)则不能通过运算符号对其赋值。下面的第一行和第四行都是正确的,其他错误。

$> mysql --max_allowed_packet = 16M
$> mysql --max_allowed_packet = 16*1024*1024
mysql> SET GLOBAL max_allowed_packet = 16M;
mysql> SET GLOBAL max_allowed_packet = 16*1024*1024;

在mysql console上,查看系统变量的指令是

mysql> show variables;

可以指定SESSIONGLOBAL关键词来找到对应的变量

SHOW GLOBAL VARIABLES LIKE '%ASDF%';
SHOW SESSION VARIABLES LIKE '%vnbm%';

Persist a global system variable to the mysqld-auto.cnf file (and set the runtime value):

SET PERSIST max_connections = 1000;
SET @@PERSIST.max_connections = 1000;

Persist a global system variable to the mysqld-auto.cnf file (without setting the runtime value):

SET PERSIST_ONLY back_log = 1000;
SET @@PERSIST_ONLY.back_log = 1000;

你可能感兴趣的:(SQL变量, since 2021-12-20)