6.1.2 变量

6.1.2 变量

变量用于临时存放数据,变量中的数据随着程序的运行而变化。变量有变量名及数据类型两个属性,变量名用于标识该变量,变量的数据类型确定了该变量存储值的格式及允许的运算。MySQL中根据变量的定义方式,可分为用户变量、局部变量和系统变量。

1.用户变量

用户可以在表达式中使用自己定义的变量,这样的变量叫作用户变量。用户可以先在用户变量中保存值,然后在程序中引用它,这样可以将值从一个语句传递到另一个语句。在使用用户变量前必须定义及初始化,如果变量没有被初始化,其值为null。

用户变量与连接有关,一个客户端定义的变量不能被其他客户端看到或使用,当客户端退出时,该客户端连接的所有变量将自动释放。

定义和初始化一个变量可以使用set语句。

语法格式为:

语法说明:

①@符号放在用户变量名前,用于与字段名称相区别。

②用户变量为用户自定义的变量名,变量名由字符、数字、“.”、“_”和“$”组成。当变量名中需要包含特殊符号时,可以使用双引号或单引号括起来。可以同时定义多个用户变量,它们之间使用逗号进行分隔,最后以分号结束。

③表达式用于给用户变量赋值,可以是常量、变量或表达式。

④用户变量的数据类型是根据其后的赋值表达式的值自动分配的。

【例6.4】创建用户变量t1,赋值为100,t2赋值为“test”,t3赋值为“中国”。

【例6.5】创建用户变量v1,赋值为10,用户变量v2的值为v1的值加5。

【例6.6】创建用户变量sid,赋值为1523105,根据sid的值查询显示该学号对应的学号及成绩信息。

提示:

①在select语句中,表达式发送到客户端后才进行计算。在having、group by及order by子句中,不能使用包含在select列表中所设的变量表达式。

②也可以使用SQL语句代替set语句来给用户变量赋值,但此时不能使用“=”,而应该使用“:=”,因为在非set语句中,“=”为比较运算符。

【例6.7】使用SQL语句为变量赋值。

在上面的SQL语句中,先执行@a:=3.14给变量@a赋值,然后再加2,再将结果赋值给@a。

2.局部变量

MySQL中的局部变量只可以在存储程序(函数、触发器、存储过程及事件中)中使用,一般定义在存储程序的begin…end语句块之间。

局部变量定义语法格式为:

说明:

①declare是用于定义局部变量所使用的关键字。

②变量名要符合标识符的命名规则。

③数据类型为MySQL中的数据类型,如int、char、varchar等数据类型。

④在定义变量的同时可以通过default关键字指定默认值。

⑤可以同时定义多个变量,多个变量之间使用逗号进行分隔。

⑥如果没有指定默认值,变量的初始值为null。

定义局部变量v1,数据类型为int并指定初始值为100,SQL代码如下:

定义变量之后,为变量赋值可以改变变量的默认值,在MySQL中使用set语句可以为变量赋值,其语法格式为:

定义局变量v1、v2、v3类型均为int类型,并通过set关键字为其赋值,SQL代码如下:

除了可以使用set语句为变量赋值外,在MySQL中还可以通过select…into为一个或多个变量赋值,该语句可以把选定的字段直接存储到对应位置的变量中,具体语法如下:

说明:

①字段名称为查询数据表中的列名称,多个字段名称之间使用逗号进行分隔。

②变量名为局部变量名称,多个变量之间使用逗号进行分隔。

声明变量empname,查询员工表,将员工表1001号的员工姓名存储到变量empname中。SQL代码如下:

3.系统变量

系统变量是MySQL的一些特殊设置。当MySQL数据库服务启动时,这些设置被引入并初始化为默认值,这些设置即为系统变量。

【例6.8】获得MySQL的版本号。

大多数系统变量在使用时,必须在名称前加两个“@@”符号才能正确返回该变量的值。而为了与其他SQL产品保持一致,在某些特定的系统变量是要省略两个“@@”符号,如current_date(系统日期)、current_time(系统时间)、current_timestamp(系统日期和时间)和current_user(SQL用户名称)。

【例6.9】获取当前用户名称及系统当前时间。

MySQL中系统变量有很多,使用show variables语句可以得到系统变量的清单。

【例6.10】查看MySQL系统变量。