用户定义变量以符号 @ 为前缀。例如:
@anyvariablename;
有两种方法可以初始化用户定义的变量。您可以使用 set 命令或使用 select 查询。第一种方法如下:
set @anyvariablename=anyvalue;
第二种方法如下:
select @anyvariablename :=anyvalue;
如果您在 select 查询中不使用冒号 (:),则会将其计算为表达式。结果要么为真,要么为假:
mysql> select @m=10;
以下是输出:
+-------+| @m=10 |+-------+| 1 |+-------+1 row in set (0.00 sec)
局部变量可以在存储过程、函数等中使用,与declare关键字一起使用。不需要像用户定义变量那样的@前缀。
局部变量的语法如下。
declare yourvariablename datatype;
注意:局部变量和用户定义变量之间的主要区别在于,每次调用存储过程时,局部变量都会用 null 值重新初始化,而会话特定变量或用户定义变量则不会。未使用 null 重新初始化。一个用户设置的用户定义变量不能被其他用户看到。给定用户的任何会话变量都会在用户退出时自动销毁。
这里是会话特定变量和局部变量的演示与存储过程。创建带有局部变量和用户定义变量的存储过程的查询如下:
mysql> delimiter //mysql> create procedure sp_localanduserdefinedvariabledemo() -> begin -> declare localvariable int default 10; -> set localvariable=localvariable+10; -> set @uservariable=@uservariable+10; -> select localvariable; -> select @uservariable; -> end; -> //query ok, 0 rows affected (0.39 sec)mysql> delimiter ;
现在设置用户定义变量的值。查询如下:
mysql> set @uservariable=10;query ok, 0 rows affected (0.00 sec)
现在调用存储过程。第一次调用时,用户定义变量为 10+10=20,局部变量为 10+10=20。
使用 call 命令调用存储过程:
mysql> call sp_localanduserdefinedvariabledemo();
以下是输出:
+---------------+| localvariable |+---------------+| 20 |+---------------+1 row in set (0.32 sec)+---------------+| @uservariable |+---------------+| 20 |+---------------+1 row in set (0.34 sec)query ok, 0 rows affected (0.36 sec)
在第二次调用中,用户定义的变量将保存值 20 并添加 10,如 20+10=30,而局部变量再次用 10 重新初始化并添加 10,如 10+10=20。
调用存储过程并检查示例输出:
mysql> call sp_localanduserdefinedvariabledemo();
以下是输出:
+---------------+| localvariable |+---------------+| 20 |+---------------+1 row in set (0.00 sec)+---------------+| @uservariable |+---------------+| 30 |+---------------+1 row in set (0.01 sec)query ok, 0 rows affected (0.02 sec)
在第三次调用中,用户定义的变量将保存值 30 并添加 10,如 30+10=40,而局部变量再次使用 10 重新初始化并添加 10,如 10+10=20。
现在你可以说,在每个过程调用中,局部变量都用某个值重新初始化,该值可能是 null 或其他值,就像在我的例子中,我提供了默认值 10。这意味着它将局部变量设置为值 10每个过程调用,而用户定义的变量则不然。
以上就是mysql 中的用户定义变量与局部变量?的详细内容。