Mysql User-Defined Variables 用户自定义变量 SET or DECLARE

在MySQL中,我们可以将一个值或一个查询结果保存的一个用户自定义的变量中,然后在后面的语句在应用。

SET定义变量;

SET @var_name := expr [, @var_name = expr ] ....

SET @var_name = expr [, @var_name = expr ] ....

注意:

①这里用 ":=" or "="都行,但是"="在其他statement语句中有相等的意思,容易混淆,有时也会出错。强烈建议用 ":="

②在语句里,可以直接用@var_name = expr定义用,不提倡这样,相当于不声明直接用。

下面给出一些例子:

简单的定义,显示

mysql> SET @t1=1, @t2=2, @t3:=4;
mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
|    1 |    2 |    4 |                  7 |
+------+------+------+--------------------+

Someone use them for rank


SET @pos := 0;  #这里用等号,感觉像是逻辑判断,结果也不对了SELECT @pos:[email protected]+1 as rank,name FROM players ORDER BY score DESC;

print only the 100th users

SET @counter:=0;
SELECT
    users.*
FROM
    users
HAVING
    (@counter:=@counter+1)%100=0
ORDER BY
    user_id;

保存查询结果值value:

SELECT @total := COUNT(*)
    FROM  table_name;  # simicolon 分割连个语句

SELECT
    table_name.id
    COUNT(*) AS ‘count‘,
    COUNT(*) /
    (SELECT
        @total) AS percent
FROM
    table_name,
WHERE 1=1
GROUP BY YEAR(birthday)
ORDER BY YEAR(birthday)
注意上面这个SQL语句看起来逻辑清晰,但与下面的语句执行效果和时间都一样(可能MySQL内部优化了)
SELECT
    table_name.id
    COUNT(*) AS ‘count‘,
    COUNT(*) /
    (SELECT 
        COUNT(*) 
     FROM 
        table_name) AS percent 
FROM
    table_name,
WHERE 1=1
GROUP BY YEAR(birthday)
ORDER BY YEAR(birthday)
其他一些例子:
http://www.mysqldiary.com/user-defined-variables/


疑问:
这里的变量只能保存一个结果值,如何才能临时保存一个select出的结果集呢。
当然简单的方法是创建表/视图; 或者临时表 ,还有好的方法呢? 待研究。

DECLARE声明变量,然后在赋值


DECLARE @var_name  var_type
这里举个例子:
例1:
DECLARE @total INT
DECLARE @total_distinct INT
SELECT
    @total:=COUNT(lice_no)    #using ":=" notation
FROM
    table_name;

SELECT @total_distinct:=COUNT( DISTINCT lice_no)   #using ":=" noations
FROM table_name; 

SELECT @total - @total_distinct
例2:
DECLARE @register_count INT;
DECLARE @total_count INT;
SELECT
    @register_count := COUNT(1)
FROM
    t1
WHERE id > 10 ;
SELECT
    @total_count := COUNT(1)
FROMt1 ;

SELECT
    (@register_count * @total_count) AS ratio2

DECLARE 与 SET 区别:

  1. DECLARE 必须指定类型,而SET是不用的
  2. SET定义的是用户自定义变量,是Session Sensitive 的; DECLARE 声明的变量一般为局部变量,其有效区间是声明的函数或存储过程中。
  3. 在变量没有用后,可以哦那个SELECT var_name := init_value。 设置为初始值。方便以后用,避免变量值在下一次引用上一次旧指带来的错误。
  4. 定义全局变量应该为 SET GLOBAL @var_name 后者SET @@GLOBAL.var_name

注意及附录:

这里关于变量的使用范围要清楚。

官方介绍网址:http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

转载请注明出处:http://blog.csdn.net/acema/article/details/37114379

Mysql User-Defined Variables 用户自定义变量 SET or DECLARE

时间: 2024-11-08 10:52:35

Mysql User-Defined Variables 用户自定义变量 SET or DECLARE的相关文章

深入MySQL用户自定义变量:使用详解及其使用场景案例

一.前言 在前段工作中,曾几次收到超级话题积分漏记的用户反馈.通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上.计数器的值会影响用户当前行为所获得积分的大小.比如,当用户在某超级话题下连续第n(n即计数器的值)次进行转发帖子时,将会获得与n相关的分数.然而,在第一次改进后问题依然存在.所以,这次在之前的基础上,通过使用MySQL变量的途径来解决该问题. 二.到底MySQL的变量分哪几类? MySQL变量一共分为两大类:用户自定义变量和系统变量.如下: 用户自定义变量 局部变量 会话

MySQL 5.6中的变量

这篇文章介绍的是MySQL  5.6中的变量,基本是我以前学习MySQL 5.6手册时整理而来. 基础概念 MySQL中的变量可分为以下几种: 1. MySQL系统变量:该类型变量反映了MySQL服务器是如何配置的.每一个系统变量都有一个默认值.系统变量可以在MySQL配置文件中进行设置,或使用MySQL启动选项进行设置.大多数系统变量都可以在MySQL运行时使用SET命令进行动态修改. 2. MySQL状态变量:该类型变量反映了MySQL服务器的运行状态. 变量按作用范围可分为: 1. 全局变

SAP云平台CloudFoundry中的用户自定义变量

CloudFoundry应用的manifest.xml里的env区域,允许用户自定义变量,如下图5个变量所示.使用cf push部署到CloudFoundry之后,在SAP Cloud Platform Cockpit的User-Provided Variables标签页里能看到这5个用户自定义的变量.通过点击"Add Varible"按钮能在Cockpit里直接添加新的环境变量.下图我添加了一个新的环境变量,名称为employee_id, 值为i042416.在Java代码里读取环境

用户自定义变量

根据本人对自定义变量的理解,利用一个晚上2个小时的时间整理:不妥之处请谅解. 一.概念:变量是计算机内存的单元,其中存放的值可以改变: 二.设置规则: 1)  变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是              "2name"则是错误的. 2)   变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型. 3)   变量用等号连接值,等号左右两侧不能有空格.   4)    变量的值如果有空格,需要使用单引号或双引号包括

JMeter学习参数化User Defined Variables与User Parameters

偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一下. 相同点:二者都是进行参数化的. 一.User Defined Variables 1.添加方法:选择“线程组”,右键点击添加-Config Element-User Defined Variables,在这个控件中,定义你所需要的参数,如 2.使用方法:在对应的需要使用参数的位置,使用${ho

【jmeter】参数化User Defined Variables与User Parameters

偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一下. 相同点:二者都是进行参数化的. 一.User Defined Variables 1.添加方法:选择“线程组”,右键点击添加-Config Element-User Defined Variables,在这个控件中,定义你所需要的参数,如 2.使用方法:在对应的需要使用参数的位置,使用${ho

jmeter用户自定义变量的实际使用

jmeter的自定义变量可以让我们随机选取变量,从而达到在性能测试过程中可以随机选取变量的目的.但是在实际使用中发现一个问题,并不试用于所有场景,比如登录 我的自定义变量如图: 在登录表单中的随机变量取值方式为: 运行完后结果为: 可以看到,两个用户有一个登录成功,有一个失败,这是因为在取值时${__RandomFromMultipleVars(user1|user2)},用户名是随机取一个,而密码${__RandomFromMultipleVars(password1|password2)}也

3、请求默认值、用户自定义变量的用处

用处:在测接口时,存在很多的接口都需要使用相同的“url路径”或者端口,此时就可以使用:添加“http请求默认值”/  或者“用户自定义变量”元件,这是可以全局使用的,不用每次麻烦的去配置 步骤如下:  一:http请求默认值 1添加配置元件“http请求默认值” 2可以事先配置好的默认全局接口可使用的几处: 3列举:这就是url路径,可以配置全局使用的 二.用户自定义变量: 1.某些接口:如登录时或者其他需要用到如用户手动输入的编号.电话号码等等,就可以使用配置元件:“用户定义变量” 2.自己

jmeter用户自定义变量

用的比较多且固定的可以设置为常量 在线程组右键添加配置原件,“用户自定义变量” 输入 名称和值,添加的变量可以在这个线程组中使用 点击“detail”进入独立单个变量的设置界面 使用时:  ${变量名} 也可以直接在测试计划的设置界面中添加自定义变量 原文地址:https://www.cnblogs.com/goodgoodstudy2018/p/11196459.html