MySQL存储过程中变量的定义以及应用详解
作者:Jiangxl~
前言
在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存储过程变量应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!