MySQL系统变量查看与设置(详解)

2023年 12月 7日 20.0k 0

MySQL 中的用户定义变量

MySQL 可以识别不同类型的变量。第一种类型是用户定义的变量,由作为前缀的@符号标识。在 MySQL 中,你可以访问用户定义的变量,而无需事先声明或初始化它们。如果你这样做,当初始化时,会给变量分配一个 NULL 值。例如,如果你对一个变量使用 SELECT,而没有给它赋值,就像在这种情况下。

SELECT @SomeVariable;

MySQL 会返回一个 NULL 值。

初始化用户定义的变量

要初始化一个用户定义的变量,需要使用 SET 或 SELECT 语句。你可以一次初始化许多变量,用逗号

分隔每个赋值语句

,如下所示。

SET @FirstVar=1, @SecondVar=2;

一旦你给一个变量赋值

,它将根据给定的值有一个类型。在前面的例子中,@FirstVar 和@SecondVar 的类型是 int。

用户定义的变量的生命周期

在会话处于活动状态时就会持续,而且它对其他会话是不可见的。一旦会话关闭,该变量就会消失。

有 5 种数据类型可以分配给用户自定义变量。

  • 字符串(二进制

    或非二进制

  • 整数
  • 小数
  • 浮点
  • NULL,它可以与任何类型相关联。

要给一个变量赋值,可以使用符号 = 或:=。下面两个语句具有相同的效果。

SET @MyIntVar = 1;
SET @MyIntVar := 1;

在 SELECT 语句中使用变量用作字段

变量可以成为 SELECT 语句的字段列表的一部分。当你在选择中指定字段时,你可以混合变量

和字段名

,就像这个例子一样。

SET @IndexVar := 1;
SELECT @IndexVar, ISBN FROM Books;

在 MySQL 中声明本地变量

局部变量不需要在其名称中使用@前缀,但在使用之前必须声明它们。要声明一个局部变量

,可以使用 DECLARE 语句,或者在 STORED PROCEDURE 声明中使用它作为参数。

当你声明一个局部变量时,可以选择给它分配一个默认值

。如果你不分配任何默认值,那么变量将被初始化为一个 NULL 值。

每个变量都生活在一个范围内,由包含其声明的 BEGIN ... END 块限定。

下面的例子说明了使用局部变量的两种不同方式:作为过程参数和作为过程内部变量

DELIMITER $$

CREATE PROCEDURE GetUpdatedPrices(itemcount INT)
BEGIN
DECLARE factor

DECIMAL(5, 2);
SET factor:=3.45;
SELECT PartNo, Description, itemcount * factor * ListPrice FROM Catalogue;
END
$$

DELIMITER ;

在前面的例子中,变量 itemcount 被用作参数,将值传递给过程。之后在 SELECT 语句中使用该变量来乘以从表中获得的 ListPrice 字段。本地变量 factor 用于存储一个小数值,用来乘以得到的价格

在 MySQL 中声明系统变量

还有第三种类型的变量称为系统变量

,用于存储影响单个客户端

连接的值(SESSION 变量)或影响整个服务器操作的值(GLOBAL 变量)。

系统变量通常在服务器启动时设置。要做到这一点,你可以使用命令行

或在选项文件中包含 SET 语句。但是它们的值可以在 SQL 脚本中进行修改。

系统变量可以使用双@符号作为前缀,或者在 SET 语句中使用 GLOBAL 或 SESSION 字样来识别。区分 GLOBAL 和 SESSION 系统变量的另一种方法是使用第二个前缀:global 或 session。下面是一些如何为系统变量赋值的例子。

-- Alternative ways to set session system variables:
SET interactive_timeout

=30000;
SET SESSION interactive_timeout=30000;
SET @@interactive_timeout=30000;
SET @@local.interactive_timeout=30000;

-- Alternative ways to set global system variables:
SET @@global.interactive_timeout=30000;
SET GLOBAL interactive_timeout=30000;

要查看会话中或服务器中使用的系统变量,可以使用 SHOW VARIABLES 语句。如果你想得到一些特定变量的值,你可以添加一个比较运算符

来过滤这个列表。例如:

SHOW VARIABLES LIKE '%timeout%'

多动手,多练习,多理解,加油!!!

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论