Go...

当前位置: 首页>>世界杯太太团

MySQL Variables

❮ MySQL 版本概述

MySQL 安装 ❯

MySQL - 变量

更新于 2025/6/18 20:37:17

MySQL 中的变量

用户定义变量

局部变量

系统变量

一般来说,变量是程序中存储信息的容器。变量的值可以根据需要多次更改。每个变量都有一个数据类型,指定我们可以在其中存储的数据类型,例如整数、字符串、浮点数等。

在某些编程语言中,例如 Java、C、C++ 等,我们需要在赋值之前声明变量的数据类型。

在 Python 等语言中,变量的数据类型是根据赋值来推断的。无需单独声明数据类型。

在 MySQL 中,无需声明数据类型,我们只需使用 SET 语句定义一个带有值的变量即可。

MySQL 中的变量

变量的主要用途是标记内存位置并在其中存储数据,以便在整个程序中使用。

我们用来声明和定义变量的字符称为字面量,字面量可以是除特殊字符、数字和保留关键字以外的任何字符。

MySQL 中有三种类型的变量。下文对此进行了描述 -

用户定义变量

局部变量

系统变量

用户定义变量

用户定义变量允许我们在一个语句中存储一个值,然后在另一个语句中引用它。为此,MySQL 提供了 SET 和 SELECT 命令来声明变量。这些变量名以符号"@"作为前缀。我们可以根据情况使用 = 或 := 符号。用户定义的数据类型可以是以下任意一种:整数、小数、布尔值等。

语法

以下是在 MySQL 中使用 SET 语句声明用户定义变量的语法 -

SELECT @variable_name = value

示例

在下面的查询中,我们使用 SET 语句为变量赋值,如下所示 -

SET @Name = 'Michael';

使用 SELECT 语句,我们可以显示 @name 变量的值 -

SELECT @Name;

输出

上述查询的输出如下所示 -

@Name

Michael

示例

此处,我们使用 SELECT 语句为变量赋值 -

SELECT @test := 10;

输出

执行给定查询后,输出显示如下 -

@test := 10

10

示例

我们使用以下查询创建名为 CUSTOMERS 的表 -

CREATE TABLE CUSTOMERS(

ID INT AUTO_INCREMENT PRIMARY KEY,

NAME VARCHAR(20) NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR (25),

SALARY DECIMAL (18, 2)

);

现在,我们使用 INSERT INTO 语句将值插入到上面创建的表中 -

INSERT INTO CUSTOMERS (NAME, AGE, ADDRESS, SALARY) VALUES

('Ramesh', 32, 'Ahmedab​​ad', 2000.00),

('Khilan', 25, 'Delhi', 1500.00),

('Kaushik', 23, 'Kota', 2000.00),

('Chaitali', 25, 'Mumbai', 6500.00),

('Hardik', 27, 'Bhopal', 8500.00),

('Komal', 22, 'Hyderabad', 4500.00),

('Muffy', 24, 'Indore', 10000.00);

CUSTOMERS 表创建如下 -

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

Kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

现在,我们使用 SELECT 语句声明一个名为 @max_salary 的变量,以显示 CUSTOMERS 表中的最高薪资值 -

SELECT @max_salary := MAX(salary) FROM CUSTOMERS;

然后,我们从表中选择薪资等于 @max_salary 变量的记录 -

SELECT * FROM CUSTOMERS WHERE SALARY = @max_salary;

输出

上述查询的输出如下所示 -

ID

NAME

AGE

ADDRESS

SALARY

7

Muffy

24

Indore

10000.00

局部变量

MySQL 局部变量可以使用 DECLARE 关键字声明。声明局部变量时,无需使用 @ 符号作为前缀。此变量是强类型变量,这意味着我们肯定需要声明其数据类型。

声明变量时,可以使用 MySQL DEFAULT 关键字来设置变量的默认值。这是一个可选参数,如果不定义,则初始值为 NULL。

语法

以下是在 MySQL 中声明局部变量的语法 -

DECLARE variable_name1, variabale_name2, ...

data_type [DEFAULT default_value];

示例

在下面的示例中,我们在存储过程中使用了 DECLARE 语句。

DELIMITER //

CREATE PROCEDURE salaries()

BEGIN

DECLARE Ramesh INT;

DECLARE Khilan INT DEFAULT 30000;

DECLARE Kaushik INT;

DECLARE Chaitali INT;

DECLARE Total INT;

SET Ramesh = 20000;

SET Kaushik = 25000;

SET Chaitali = 29000;

SET Total = Ramesh+Khilan+Kaushik+Chaitali;

SELECT Total,Ramesh,Khilan,Kaushik,Chaitali;

END //

现在,让我们使用以下查询调用存储过程 -

CALL salaries() //;

输出

以下是输出 -

Total

Ramesh

Khilan

Kaushik

Chaitali

104000

20000

30000

25000

29000

系统变量

系统变量由 MySQL 预定义。它们包含我们操作数据库所需的数据。每个 MySQL 系统变量都有一个默认值。

MySQL 中的 SET 命令可以在运行时动态更改系统变量的值。

SHOW VARIABLES 命令有两个可用的变量作用域修饰符。它们是 GLOBAL 和 SESSION。

GLOBAL 变量在整个生命周期内都有效。

SESSION 变量只能在当前会话中有效。

以下命令用于显示 MySQL 中的所有系统变量 -

SHOW [GLOBAL | SESSION] VARIABLES;

示例

在下面的示例中,我们使用 SHOW VARIABLES 查询显示现有的全局系统变量 -

SHOW VARIABLES LIKE '%table%';

变量以表格形式显示如下 -

Variable_name

Value

big_tables

OFF

default_table_encryption

OFF

innodb_file_per_table

ON

innodb_ft_aux_table

innodb_ft_server_stopword_table

innodb_ft_user_stopword_table

innodb_table_locks

ON

innodb_temp_tablespaces_dir

.\#innodb_temp\

innodb_undo_tablespaces

2

innodb_validate_tablespace_paths

ON

lower_case_table_names

1

max_heap_table_size

16777216

old_alter_table

OFF

performance_schema_max_table_handles

-1

performance_schema_max_table_instances

-1

performance_schema_max_table_lock_stat

-1

show_create_table_skip_secondary_engine

OFF

show_create_table_verbosity

OFF

table_definition_cache

2000

table_encryption_privilege_check

OFF

table_open_cache

4000

table_open_cache_instances

16

tablespace_definition_cache

256

temptable_max_mmap

1073741824

temptable_max_ram

1073741824

temptable_use_mmap

ON

tmp_table_size

99614720

updatable_views_with_limit

YES

现在,使用下面的查询,我们将获取 MySQL"key_buffer_size"变量的当前值 -

SELECT @@key_buffer_size;

输出

以下是上述查询的输出 -

@@key_buffer_size

8388608

❮ MySQL 版本概述

MySQL 安装 ❯