变量用于在程序执行期间存储数据或信息。这是一种用适当的名称标记数据的方法,有助于读者更清楚地理解程序。变量的主要目的是将数据存储在内存中,并且可以在整个程序中使用。
MySQL 可以通过三种不同的方式使用变量,如下所示:
- 用户定义的变量
- 局部变量
- 系统变量
用户定义的变量
有时,我们希望将值从一条语句传递到另一条语句。用户定义的变量使我们能够在一个语句中存储一个值,然后可以将其引用到另一个语句。MySQL提供了一个SET和SELECT语句来声明和初始化一个变量。用户定义的变量名称以 @ 符号开头。
用户定义的变量不区分大小写,例如@name 和@NAME;两者都是一样的。一个人声明的用户定义变量对另一个人是不可见的。我们可以将用户定义的变量分配给有限的数据类型,如整数、浮点数、小数、字符串或 NULL。用户定义变量的最大长度为64 个字符。
用户定义变量的语法
以下语法用于声明用户定义的变量。
1、通过使用SET语句
SET @var_name = value;
注意:我们可以在 SET 语句中使用 '=' 或 ':=' 赋值运算符。
2、通过使用SELECT语句
SELECT @var_name := value;
用户定义变量的示例1
在这里,我们将使用 SET 语句为变量赋值。
mysql> SET @name='peter';
然后,我们可以使用 SELECT 语句显示上述值。
mysql> SELECT @name;
输出结果为:
用户定义变量的示例2
让我们在MySQL数据库中创建表students,如下图:
运行以下语句以获取 'students' 表中学生的最大年龄,并将年龄分配给用户定义的变量@maxage。
mysql> SELECT @maxage:= MAX(age) FROM students;
输出结果为
现在,运行 SELECT 语句,该语句使用 @maxage 变量返回学生的最大年龄。
mysql> SELECT firstname, lastname, age FROM students WHERE age = @maxage;
上述语句执行成功后,我们会得到如下结果:
用户定义变量的示例3
如果我们访问未声明的变量,它将给出NULL输出。
mysql> SELECT @var1;
输出结果为
局部变量
局部变量是一种不以@ 符号为前缀的变量。局部变量是强类型变量。局部变量的作用域在声明它的存储程序块中。MySQL 使用DECLARE关键字来指定局部变量。DECLARE 语句还结合了DEFAULT子句来为变量提供默认值。如果您不提供 DEFAULT 子句,它将给出初始值NULL。主要用在存储过程程序中。
局部变量的语法
我们可以使用具有以下语法的 DECLARE 语句:
DECLARE variable_name datatype(size) [DEFAULT default_value];
让我们看下面的例子来使用局部变量。
局部变量的示例
mysql> DECLARE total_price Oct(8,2) DEFAULT 0.0;
我们还可以使用单个 DECLARE 语句定义两个或多个具有相同数据类型的变量。
mysql> DECLARE a,b,c INT DEFAULT 0;
下面的示例解释了我们如何在存储过程中使用 DECLARE 语句。
DELIMITER //
Create Procedure Test()
BEGIN
DECLARE A INT DEFAULT 100;
DECLARE B INT;
DECLARE C INT;
DECLARE D INT;
SET B = 90;
SET C = 45;
SET D = A + B - C;
SELECT A, B, C, D;
END //
DELIMITER ;
上述函数执行成功后,调用存储过程函数如下:
mysql> CALL Test();
输出结果为
系统变量
系统变量是所有程序单元的一个特殊类,它包含预定义的变量。MySQL 包含各种配置其操作的系统变量,每个系统变量都包含一个默认值。我们可以通过在运行时使用SET语句来动态更改一些系统变量。它使我们能够修改服务器操作而无需停止并重新启动它。系统变量也可以在表达式中使用。
MySQL 服务器提供了一堆系统变量,例如 GLOBAL、SESSION 或 MIX 类型。我们可以在服务器的整个生命周期中看到 GLOBAL 变量,而 SESSION 变量仅对特定会话保持活动状态。
我们可以通过以下方式查看系统变量的名称和值:
方式一:要查看正在运行的服务器使用的当前值,请执行以下命令。
mysql> SHOW VARIABLES;
或者
mysql > SELECT @@var_name;
方式二:当我们想要查看基于其编译默认值的值时,使用以下命令。
mysql> mysqld --verbose --help
系统变量的示例一
mysql> SHOW VARIABLES LIKE '%wait_timeout%' ;
输出结果为:
系统变量的示例2
mysql> SELECT @@key_buffer_size;
输出结果为:
本站推荐
-
1123
-
1054
-
916
-
912
-
908