MySQL用户变量怎么定义?set和select用法详解一看就懂

 更新时间:2026年07月23日 11:32:11   作者:依米娜娜  
还在为SQL语句间传递数据发愁?本文带你快速掌握MySQL用户变量的定义与使用,详解set和select两种赋值方式,避开常见陷阱,让你的查询更高效灵活

用户变量

使用场景:定义一个值,方便其他的SQL使用,相当于在不同的SQL之间进行传递变量使用。

两种定义用户变量的方式:set select 

set的使用方法: 

set @变量名 {= | := } value [,@变量名 {= | := } value,…] ; 

set的合法变量值:

  • 1.字面量
  • 2.可以系统表达式
  • 3.可以来自于一个SQL语句
  • 4.可以是一个系统函数 

例1

定义用户变量PI,其初值为3.1415926

SET @PI := 3.1415926; 

注意:用户变量的数据类型派生自其值的数据类型 

例2

定义一个变量,其值是1号球队的队长号码

SET @anr := (SELECT playerno FROM teams WHERE teamno=1); 

获取变量的值: 

select @变量名; 

注意点:

mysql> set @a=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set @a=5,@b=@a;
Query OK, 0 rows affected (0.00 sec)
mysql> select @b;
±-----+
| @b |
±-----+
| 1 |
±-----+
1 row in set (0.00 sec)

​当一次对多个变量定义时,MySQL会同时检测等号右边的值是否成立,如果成立则将该值赋予用户变量,所以在本次当中b的值为a的旧值。

select设置用户变量:

select :=这种方式,因为=在select当中是比较操作符。

这种语法:

1)会返回一行

2)只能使用:=,不能使用=,=号这里被看做比较操作符

例3

创建用户变量playerno并赋值为7

SELECT @playerno := 7;

例4

定义3个用户变量

SELECT @name := ‘tom', @town := ‘Inglewood',
@postcode := ‘1234ab';

例5

查询6号球员的姓名、城市和邮编,并保存到3个变量中

SELECT @name := name, @town := town, @postcode := postcode
FROM players
WHERE playerno = 6;

注意,如果SELECT查询返回多行,就把最后一行的值赋给变量,而不会抛出异常

例6

定义变量@playerno,将players表中最小的球员编号赋给它:6

SELECT @playerno := playerno
FROM players
ORDER BY playerno DESC;
SELECT @playerno;

注意:当用户变量用在WHERE或者HAVING子句中时,必须首先使用另外一条语句来定义它们 

例7

SELECT @pnr7 := 7
FROM players
WHERE playerno < @pnr7;

这条语句不会返回编号小于7的球员。因为WHERE子句在SELECT语句之前执行

用户变量的生命周期:

只要会话不断,该用户变量可以一直使用,如果想实现多个会话之间的用户变量传递,可以将用户变量保存到数据表中。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql中limit查询踩坑实战记录

    mysql中limit查询踩坑实战记录

    在MySQL中我们常常用order by来进行排序,使用limit来进行分页,下面这篇文章主要给大家介绍了关于mysql中limit查询踩坑的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • MySQL安装与配置:手工配置MySQL(windows环境)过程

    MySQL安装与配置:手工配置MySQL(windows环境)过程

    这篇文章主要介绍了MySQL安装与配置:手工配置MySQL(windows环境)过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Mysql多表操作方法讲解教程

    Mysql多表操作方法讲解教程

    这篇文章主要介绍了MySQL数据库的多表操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-12-12
  • MySQL常用分库分表方案汇总

    MySQL常用分库分表方案汇总

    本文主要介绍了MySQL常用分库分表方案汇总,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • MySQL中root用户密码管理的三种场景完全指南

    MySQL中root用户密码管理的三种场景完全指南

    在MySQL数据库的日常运维中,root用户密码管理是最基础也最重要的操作之一,本文将针对三种常见场景,分别给出详细的操作步骤,涵盖MySQL 5.6、5.7、8.0三个主流版本,感兴趣的小伙伴可以了解下
    2026-02-02
  • MySQL如何统计一个数据库所有表的数据量

    MySQL如何统计一个数据库所有表的数据量

    最近在做统计想查找一个数据库里基本所有的表数据量,下面这篇文章主要给大家介绍了关于MySQL如何统计一个数据库所有表的数据量的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • MySQL中Binlog文件占用空间比较大该如何清理

    MySQL中Binlog文件占用空间比较大该如何清理

    在MySQL中binlog(二进制日志)是一种记录数据库操作的日志文件,它记录了数据库更改的所有操作,这篇文章主要介绍了MySQL中Binlog文件占用空间比较大该如何清理的相关资料,需要的朋友可以参考下
    2025-09-09
  • MySQL日志系统之错误日志、慢查询日志、二进制日志详解

    MySQL日志系统之错误日志、慢查询日志、二进制日志详解

    MySQL日志系统是数据库管理的重要组成部分,它帮助数据库管理员监控数据库活动、优化查询、恢复数据以及诊断问题,这篇文章主要介绍了MySQL日志系统之错误日志、慢查询日志、二进制日志的相关资料,需要的朋友可以参考下
    2025-05-05
  • MySQL截取和拆分字符串函数用法示例

    MySQL截取和拆分字符串函数用法示例

    这篇文章主要介绍了MySQL截取和拆分字符串函数用法,结合实例形式分析了mysql针对字符串的截取与拆分函数SUBSTRING及SUBSTRING_INDEX相关使用方法,需要的朋友可以参考下
    2016-09-09
  • MySQL多版本并发控制MVCC底层原理解析

    MySQL多版本并发控制MVCC底层原理解析

    本文详细讲解了MySQL多版本并发控制MVCC底层原理,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12

最新评论