变量的分类
变量的作用
如上图所示变量主要是系统变量和自定义变量,其中系统变量主要是mysql数据库系统自带的,启动即加载。
系统变量注意点:
1.全局变量作用域:当前会话及后开启的新会话(数据库未重启状态下);
2.会话变量作用域:当前会话,新开启会话无效,数据库重启后变量无效;
3.想要变量永久生效?只能写入配置文件中,并重启数据库。
4.select @@autocommit=0; --查询会话变量
select @@global.autocommit=0; --查询全局变量
熟知的一些系统变量:
mysql> show variables; --查询所有会话变量
mysql> show global variables; --查询所有全局变量
这个我还没整理出来,平时用到的比较少,比如autocommit、隔离级别之类的。
自定义变量注意点:
1.局部变量作用域:仅限begin end中,超出范围无效;
2.用户变量作用域:仅限当前会话;
变量的使用
1.系统变量因为其作用于数据库系统,所以都是有固定参数设置,比如开启1、关闭0之类的。
2.自定义变量作用于业务sql语句中,所以使用比较多,尤其是存储过程中(终于说到了重点)
由于系统变量都是系统自带的,下面不作更多的分析(这个属于系统层面的优化吧?)
变量的申明:
局部变量:
mysql> declare test int default 0;
#declare语句专门用于定义局部变量
语法:declare 变量名 类型 default 初始化值;
用户变量:
mysql> set @test=1;
mysql> set @test1:=1;
mysql> select @ test2:=2;
#用户变量申明时顺带就赋值了,赋值时可以用=也可以用:=,使用select赋值时必须使用:=
变量的赋值:
局部变量:
mysql> ……
mysql> begin
mysql> declare test int default 0;
mysql> select 1 into test ;
mysql> end;
用户变量:
mysql> set @test=1;
Query OK, 0 rows affected (0.01 sec)
mysql> set @test=1+1;
Query OK, 0 rows affected (0.01 sec)
mysql> select @test;
+-------+
| @test |
+-------+
| 2 |
+-------+
1 row in set (0.00 sec)
mysql> set @test=1+@test;
Query OK, 0 rows affected (0.00 sec)
mysql> select @test;
+-------+
| @test |
+-------+
| 3 |
+-------+
1 row in set (0.00 sec)
今天变量就到这里,我要去复习存储过程了!各位加油鸭!