MySQL存储过程中变量的定义以及应用详解

 更新时间:2023年06月05日 11:12:39   作者:Jiangxl~  
MySQL变量定义和应用是我们经常会遇到的问题,下面这篇文章主要给大家介绍了关于MySQL存储过程中变量的定义以及应用的相关资料,文章通过图文介绍的非常详细,需要的朋友可以参考下

前言

在MySQL数据库种分为三种类型的变量,分别是系统变量、用户自定义的变量、局部变量。

1.系统变量

系统变量是由MySQL数据库提供的系统变量,属于服务层面的系统变量,系统变量在使用时的级别又分为两种:

  • 全局变量(global):全局变量针对所有的会话生效,但是当重启MySQL后,修改的系统变量值将会失效,若想永久修改变量的值,可以在MySQL的配置文件中声明。
  • 局部变量(session):会话变量只针对与单个会话生效,到另一个会话窗口将失效。

系统变量的两种使用级别可以在使用变量时指定使用哪一个级别,如果不明确指定系统变量的级别,默认是session。

1.1.查看系统变量的语法格式

1)查看所有的系统变量

SHOW [ SESSION | GLOBAL ] VARIABLES 

2)查找某一个系统变量

SHOW [ SESSION | GLOBAL ] VARIABLES LIKE '变量名'

3)查看指定变量的值

SELECT @@[SESSION | GLOBAL].变量名

1.2.设置系统变量值的语法格式

两种方式可以设置变量的值。

SET [ SESSION | GLOBAL ] 系统变量名 = 值 
SET @@[SESSION | GLOBAL].系统变量名 = 值 

1.3.系统变量使用案例

1)查看所有的系统变量

mysql> show variables;

2)查看名称包含auto的系统变量

左侧是变量名,右侧是变量值。

mysql> show variables like '%auto%';
+----------------------------------------------+-------+
| Variable_name                                | Value |
+----------------------------------------------+-------+
| auto_generate_certs                          | ON    |
| auto_increment_increment                     | 1     |
| auto_increment_offset                        | 1     |
| autocommit                                   | ON    |
| automatic_sp_privileges                      | ON    |
| caching_sha2_password_auto_generate_rsa_keys | ON    |
| innodb_autoextend_increment                  | 64    |
| innodb_autoinc_lock_mode                     | 2     |
| innodb_stats_auto_recalc                     | ON    |
| sha256_password_auto_generate_rsa_keys       | ON    |
| sql_auto_is_null                             | OFF   |
+----------------------------------------------+-------+
11 rows in set (0.00 sec)

3)查看指定变量的变量值

mysql> select @@session.autocommit;
+----------------------+
| @@session.autocommit |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.00 sec)

4)修改系统变量的值

mysql> set @@session.autocommit = 0;
Query OK, 0 rows affected (0.02 sec)
或者
mysql> set session autocommit = 0;
Query OK, 0 rows affected (0.00 sec)

2.用户自定义的变量

在MySQL数据库中,还支持用户根据自己的需要,自定义的环境变量,用户自定义的变量不需要提前声明,直接赋值使用即可,用户自定义的变量仅应用于当前的会话连接。

用户自定义的变量是不需要声明或者初始化的,如果没有赋值直接使用自定义的变量名,变量值则为NULL。

2.1.用户自定义变量的语法格式

1)定义变量并赋值

方式一,使用SET直接定义变量并赋值。

SET @变量名1 = 变量值1
SET @变量名1 = 变量值1 , @变量名2 = 变量值2

SET @变量名1 := 变量值1 
SET @变量名1 := 变量值1 , @变量名2 := 变量值2 

建议使用:=的方式为变量赋值,因为在变量运算时=符号也是运算符号。

方式二,由于用户自定义的变量不需要声明,可以使用SELECT直接定义变量和赋值。

SELECT @变量名1 := 变量值1 , @变量名2 := 变量值2 

方式三,将SQL的查询结果赋值给变量。

SELECT 字段名 INTO @变量名 FROM 表名
将某个表的某个字段的结果赋值给变量。

2)使用变量

SELECT @变量名1

2.2.用户自定义变量的案例

1)使用set定义变量并赋值

1.一次性定义一个变量
mysql> set @name = 'jiangxl';
或者
mysql> set @username :=  'wang';
2.一次性定义多个变量
mysql> set @username = 'wang' , @userid = '1';
或者
mysql> set @age := '19' , @book := 'linux';

2)使用select定义变量并赋值

使用select定义完变量赋完值之后就可以看到变量的值。

1.一次性定义一个变量
mysql> select @myzhiwu := 'devops_linux';
+----------------------------+
| @myzhiwu := 'devops_linux' |
+----------------------------+
| devops_linux               |
+----------------------------+

2.一次性定义多个变量
mysql> select @myzhiwu := 'devops_linux' , @myage := '25';
+----------------------------+----------------+
| @myzhiwu := 'devops_linux' | @myage := '25' |
+----------------------------+----------------+
| devops_linux               | 25             |
+----------------------------+----------------+

3)将ryxxb的总数赋值给变量

mysql> select count(*) into @mycount from ryxxb;

4)查看变量的值

查询各个定义的变量所对应的值。

mysql> select @name,@username,@userid,@age,@book,@myzhiwu,@myage;
+---------+-----------+---------+------+-------+--------------+--------+
| @name   | @username | @userid | @age | @book | @myzhiwu     | @myage |
+---------+-----------+---------+------+-------+--------------+--------+
| jiangxl | wang      | 1       | 19   | linux | devops_linux | 25     |
+---------+-----------+---------+------+-------+--------------+--------+

3.可以在存储过程中定义的局部变量

局部变量是在存储过程中声明的,仅应用于存储过程的BEGIN…END这个范围中,局部变量需要通过DECLARE关键字声明,声明完成后再通过SET或者SELECT进行赋值,局部变量和用户自定义变量的赋值方式是一模一样的。

3.1.局部变量的语法格式

1)声明变量

DECLARE 变量名 变量值的类型 [DEFAULT 默认值]
变量值的类型就是数据库字段的类型,例如:INT BIGINT CHAR VARCHAR DATE TIME等等。

2)变量赋值

SET 变量名 = 变量值
SET 变量名 := 变量值
SELECT 字段名 INTO 变量名 FROM 表名;

3.2.局部变量的应用案例

创建一个存储过程,在里面定义两个局部变量,分别用SET和SELECT赋值,最后查看变量的内容。

1.创建视图
create procedure proc_2()
begin
	declare ryxxb_count int default 0;			#声明ryxxb表总数的变量,类型为int,默认值为0
	declare username varchar(10);				#声明username变量,类型为varchar
	set username := 'jiangxl';						#赋值username变量
	select count(*) into ryxxb_count from ryxxb;		#将ryxxb表的总数据量赋值为ryxxb_count变量
	select ryxxb_count,username;						#查询变量的值
end;

2.调用视图
mysql> call proc_2();
+-------------+----------+
| ryxxb_count | username |
+-------------+----------+
|          22 | jiangxl  |
+-------------+----------+
1 row in set (0.00 sec)

补充知识:变量的赋值

同程序里面一样,定义了变量,我们也需要在程序中对他赋值,下面是示例代码:

DECLARE total_count INT DEFAULT 0
 SET total_count = 10;

可以看到进行赋值时候需要在前面加上:SET 这个关键字。

当然由于存储过程的特殊性(用于数据库的数据操作),所以除了SET这种赋值方法,还可以通过SELECT INTO语句将返回的值赋给变量:

DECLARE total_products INT DEFAULT 0
 SELECT COUNT(*) INTO total_products
 FROM products 

看到这里把products的记录数赋给了total_products这个变量。所以如果上面我们表格内是3个记录的话,这里total_products就是等于3了

总结

到此这篇关于MySQL存储过程中变量的定义以及应用详解的文章就介绍到这了,更多相关MySQL存储过程变量应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL查询性能优化索引下推

    MySQL查询性能优化索引下推

    这篇文章主要介绍了MySQL查询性能优化索引下推,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-08-08
  • MySQL为数据表建立索引的原则详解

    MySQL为数据表建立索引的原则详解

    这篇文章主要为大家详细介绍了MySQL为数据表建立索引的原则,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 实战MySQL升级的最佳方法

    实战MySQL升级的最佳方法

    这篇文章给大家从理论到实战详细分享了MySQL升级的最佳方法,有需要的朋友跟着学习操作下吧。
    2017-12-12
  • MySql报错Table mysql.plugin doesn’t exist的解决方法

    MySql报错Table mysql.plugin doesn’t exist的解决方法

    一般产生原因是手工更改my.ini的数据库文件存放地址导致的,大家可以参考下下面的方法
    2013-02-02
  • linux 之centos7搭建mysql5.7.29的详细过程

    linux 之centos7搭建mysql5.7.29的详细过程

    这篇文章主要介绍了linux 之centos7搭建mysql5.7.29的详细过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • mysql连接查询(左连接,右连接,内连接)

    mysql连接查询(左连接,右连接,内连接)

    这篇文章主要介绍了mysql连接查询(左连接,右连接,内连接)的相关资料,这里举例说明如果使用及附实例代码,需要的朋友可以参考下
    2017-07-07
  • Navicat远程连接SQL Server并转换成MySQL步骤详解

    Navicat远程连接SQL Server并转换成MySQL步骤详解

    最近遇到一个需求是将SQL Server转换为 MySQL的格式,由于不想在本地安装 SQL Server,所以决定在远程的 Windows 服务器上安装,并在本地使用Navicat远程连接它,然而在实现过程中遇到了诸多问题,记录于此。感兴趣的朋友们下面来一起学习学习吧。
    2017-01-01
  • MySQL深入详解delete与Truncate及drop的使用区别

    MySQL深入详解delete与Truncate及drop的使用区别

    对于drop、truncate和delete虽然简单,但是真要使用或者面试时候问到还是需要有一定的总结,下面这篇文章主要给大家介绍了关于mysql中drop、truncate与delete区别的相关资料,需要的朋友可以参考下
    2022-07-07
  • MySQL数据库的高可用方案总结

    MySQL数据库的高可用方案总结

    这篇文章主要针对MySQL数据库的高可用方案进行详细总结,高可用架构对于互联网服务基本是标,本文是对各种方案的总结,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • MySQL创建表时字符串的默认值问题

    MySQL创建表时字符串的默认值问题

    这篇文章主要介绍了MySQL创建表时字符串的默认值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论