MySQL 变量

变量用于在程序执行期间存储数据或信息。这是一种用适当的名称标记数据的方法,有助于读者更清楚地理解程序。变量的主要目的是将数据存储在内存中,并且可以在整个程序中使用。

MySQL 可以通过三种不同的方式使用变量,如下所示:

  1. 用户定义的变量
  2. 局部变量
  3. 系统变量

用户定义的变量

有时,我们希望将值从一条语句传递到另一条语句。用户定义的变量使我们能够在一个语句中存储一个值,然后可以将其引用到另一个语句。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;

输出结果为:

热门文章

优秀文章