MySQL存储过程与各种变量
局部变量局部变量只在BEGIN和END的代码块中有效,执行完该代码块,变量就消失,在存储过程中最为常见。DECLARE语句专门用于定义局部变量,可以使用DEFAULT语句来指明默认值。定义多个变量:DECLARE x, y INT DEFAULT 0。赋值用的是SET或SELECT语句:DECLARE total_count INT DEFAULT 0SET total_count ...
局部变量
局部变量只在BEGIN
和END
的代码块中有效,执行完该代码块,变量就消失,在存储过程中最为常见。DECLARE语句专门用于定义局部变量,可以使用DEFAULT语句来指明默认值。定义多个变量:DECLARE x, y INT DEFAULT 0
。赋值用的是SET
或SELECT
语句:
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 系统变量
更多推荐
所有评论(0)