局部变量

局部变量只在BEGINEND的代码块中有效,执行完该代码块,变量就消失,在存储过程中最为常见。DECLARE语句专门用于定义局部变量,可以使用DEFAULT语句来指明默认值。定义多个变量:DECLARE x, y INT DEFAULT 0。赋值用的是SETSELECT语句:

DECLARE total_count INT DEFAULT 0
SET total_count = 10;
SELECT COUNT(*) INTO total_count FROM products 

存储过程中的常见应用:

DELIMITER //
CREATE PROCEDURE p1(IN a INT, IN b INT)
BEGIN
    DECLARE c INT DEFAULT 0;
    set c=a+b;
    select c AS num;
END//

c就是局部变量

用户变量

用户变量与数据库连接有关,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将失效。用户变量不需要声明,可以直接使用,用户变量以@var_name的形式命名变量,变量名必须以@开头。

赋值语法,一般用SET

set @varName=value;
SELECT @var_name := value;

赋值后输出用select @varName。比如:

@c=@b*2是正确的,@b=@b+1是错误的,但set @b=@b+1是正确的,这一点不像C++。

系统变量

MySQL可以访问许多系统变量。当服务器运行时许多变量允许动态更改。这样就可以修改服务器操作而不需要停止并重启服务器。系统变量又包含两种:会话变量影响具体客户端连接的操作,全局变量影响服务器整体操作。

全局变量

全局变量在 MySQL 启动的时候由服务器自动初始化他们的值, 这些默认的值可以在/etc/my.cnf中修改。要想更改全局变量,必须具有SUPER权限。全局变量作用于SERVER的整个生命周期,但重启后所有设置的全局变量均失效。要想让全局变量重启后继续生效,需要更改相应的配置文件。

查看全局变量

show global variables;  // 变量太多,一般不用
show global variables like `wait_timeout`;


修改全局变量

set global varname = value;
set @@global.varname = value;

会话变量

会话变量在每一个数据库连接建立后,由MySQL来初始化。MySQL会将当前所有的全局变量都复制一份作为会话变量。也就是说,如果在建立会话以后,没有人为更改过会话变量与全局变量的值,那这两份变量的值应该是完全一致的。设置会话变量不需要特殊权限,会话变量的作用域与用户变量一样,仅限于当前连接。

查看会话变量

show session variables; // 变量太多,一般不用
show variables like 'version';

修改会话变量

set session varname = value;
set @@session.varname = value;

SESSION关键字,都可以用LOCAL关键字来代替。

参考:
MySQL 系统变量

Logo

更多推荐