若是想看其余有关于MySQL数据库的文章,请跳转到到MySQL自学目录mysql
本节讲述MySQL中的系统变量与用户自定义变量的定义及用法web
先来看一个图:
sql
举个栗子数据库
mysql> show global variables like 'character_set_client'; +----------------------+-------+
| Variable_name | Value | +----------------------+-------+
| character_set_client | utf8 | +----------------------+-------+
1 row in set, 1 warning (0.21 sec)
mysql> show session variables like 'character_set_client'; +----------------------+-------+
| Variable_name | Value | +----------------------+-------+
| character_set_client | utf8 | +----------------------+-------+
1 row in set, 1 warning (0.01 sec)
mysql> # 修改character_set_client的值,再次查看global与session的变化
mysql> set character_set_client = gbk;
Query OK, 0 rows affected (0.16 sec)
mysql> show session variables like 'character_set_client'; +----------------------+-------+
| Variable_name | Value | +----------------------+-------+
| character_set_client | gbk | +----------------------+-------+
1 row in set, 1 warning (0.04 sec)
mysql> show global variables like 'character_set_client'; +----------------------+-------+
| Variable_name | Value | +----------------------+-------+
| character_set_client | utf8 | +----------------------+-------+
1 row in set, 1 warning (0.00 sec)
从新设置全局系统变量的值:
- set @@global.全局系统变量名 = 值;
- set global 全局变量名 = 值;服务器
从新设置会话系统变量:
- set @@session.会话系统变量 = 值;
- set session 会话系统变量名 = 值;
- set 会话系统变量名 = 值;session
用户自定义变量分为用户会话变量(以@开头)以及局部变量(不以@开头)。数据结构
当定义了会话系统变量,在会话期间,该会话系统变量一直有效。不一样会话之间的会话系统变量是不能相互访问的。 svg
举个栗子函数
mysql> # set方法
mysql> set @name = 'mysql';
Query OK, 0 rows affected (0.00 sec)
mysql> select @name; +-------+
| @name | +-------+
| mysql | +-------+
1 row in set (0.02 sec)
mysql> # select方法一
mysql> select @age = 18; +-----------+
| @age = 18 | +-----------+
| NULL | +-----------+
1 row in set (0.15 sec)
mysql> # select方法二
mysql> select count(*) from goods into @goodsnum; Query OK, 1 row affected (0.15 sec) mysql> select @goodsnum; +-----------+
| @goodsnum | +-----------+
| 3 | +-----------+
1 row in set (0.00 sec)
declare命令专门用于定义局部变量及对应的数据结构。局部变量必须定义在存储程序中(如函数、触发器、存储过程以及事件),而且局部变量的做用范围仅仅局限于存储程序中,脱离存储程序没有丝毫意义。局部变量主要用于下面三种场合:
- 定义在存储程序的begin-end语句块之间。此时,先使用declare定义,而且指定其数据类型。而后用set或select为其赋值。
- 当局部变量做为存储过程或者函数的参数使用,此时不用declare定义,可是须要指出参数的数据类型。
- 局部变量用于sq语句中。spa
举个例子
mysql> delimiter $ # 重置命令结束标记
mysql> create procedure aaa(in a int) -> modifies sql data -> begin -> declare s1 int;
-> set a = 1;
-> select count(*) from goods into s1; -> end$ Query OK, 0 rows affected (0.00 sec)