`
javababy1
  • 浏览: 1169994 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

mysql变量使用总结

 
阅读更多

set语句的学习:

使用select定义用户变量的实践
将如下语句改成select的形式:
set@VAR=(selectsum(amount)frompenalties);
我的修改:
select@VAR:=(selectsum(amount)frompenalties);

我这样改,虽然是可以的。但是,对比的书中的答案,发现这样的方式太蹩脚了。说明没有很好地理解select定义变量的本质。
select中,发现有一个用户变量,如果没有定义,那么就会初始化。
select子句原来的方式根本不受到影响。只是增加了用户变量。所以,还是按照原来的方式使用select子句。那么像:selectsum(amount)frompenalties。增加变量就成

:select@VAR:=sum(amount)frompenalties

sum(amount)的结果赋给变量@VAR:。变量前面有select,那用户么就是显示该变量了。


笔记部分:mysql变量的术语分类:
1.用户变量:以"@"开始,形式为"@变量名"
用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
2.全局变量:定义时,以如下两种形式出现,setGLOBAL变量名或者set@@global.变量名
对所有客户端生效。只有具有super权限才可以设置全局变量

3.会话变量:只对连接的客户端有效。

4.局部变量:作用范围在beginend语句块之间。在该语句块里设置的变量
declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量


通俗理解术语之间的区别:

用户定义的变量就叫用户变量。这样理解的话,会话变量和全局变量都可以是用户定义的变量。只是他们是对当前客户端生效还是对所有客户端生效的区别了。所以,用户变量包括了会话变量和全局变量

局部变量与用户变量的区分在于两点:1.用户变量是以"@"开头的。局部变量没有这个符号。2.定义变量不同。用户变量使用set语句,局部变量使用declare语句定义3.作用范围。局部变量只在begin-end语句块之间有效。在begin-end语句块运行完之后,局部变量就消失了。

所以,最后它们之间的层次关系是:变量包括局部变量和用户变量。用户变量包括会话变量和全局变量。


使用备忘,set@var若没有指定GLOBALSESSION,那么默认将会定义用户变量
两种方式定义用户变量:
1."=",set@a=3,@a:=5
2.":="select常常这样使用
总结:使用selectset设置变量的区别,set可以使用以上两种形式设置变量。而select只能使用":="的形式设置变量
实践积累:用户变量在mysql客户端退出后,会自动消失。之后我打开客户端,使用"select@a;"显示变了的值为null。说明,未定义的变量初始化是null

实际中的问题

设置常量对group_concat()的配置影响:
SET@@GROUP_CONCAT_MAX_LEN=4
手册中提到设置的语法是这样的:
SET[SESSION|GLOBAL]group_concat_max_len=val;

以下两种形式都能达到达到同样的效果,但是有什么区别?

SET@@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就变成了:SET@@GROUP_CONCAT_MAX_LEN=4;

2011.2.25

之前的理解不怎么准确。现在对加深理解后的地方进行总结。

mysql中变量的层次关系是:大体包括用户变量和系统变量。系统变量包括系统会话变量和系统全局变量。

我是这样理解相互之间的区别:

因为用户变量就是用户定义的变量,系统变量就是mysql定义和维护的变量。所以,用户变量与系统变量的区别在于,是谁在管理这些变量。mysql一启动的时候就会读取系统变量(这样做目的是可以确定mysql的以何种机制或模式运行)。系统会话变量与用户变量都是在当前客户端退出后消失。他们之间的区别可以这样理解,虽然常常看到"set@@varible"的形式去改变系统变量的值,但是并不涉及到定义系统变量。用户变量是可以自己定义(初始化)。系统变量按照只是在改变值。

局部变量只在begin-end语句块中定义并有效。执行到该语句块之后就消失了。定义的方式有明显的特点,使用declare语句。

为什么看到使用系统变量以"@@变量名""变量名"的形式出现,怎么理解两者形式的区别?

使用系统变量理论上是可以使用两种形式:1.前面带有符号"@@"2.符号省略。比如我会看的如下形式:CURRENT_USER。但是,约定系统变量要使用"@@变量名"的形式,就是在前面加上符号"@@"

为什么会出现CURRENT_USER这样没有符号的情况?看书籍《SQLForMySQLDevelopersAComprehensiveTutorialandReference》大致说明的原因,这样做是为了与其他的SQL产品保持一致。

分享到:
评论

相关推荐

    开发环境变量设置总结

    在每个开发语言或数据库等安装应用中,必须设置环境变量,以下是我总结的环境变量的配置,非常全面

    mysql查询语句中用户变量的使用代码解析

    上一篇文章中我们介绍了MySQL优化总结-查询总条数。这篇文章我们来介绍下查询语句中的另一个知识:用户变量的使用代码解析。 先上代码吧 SELECT `notice`.`id` , `notice`.`fid` , `notice`.`has_read` , `notice`....

    高性能MySQL(第3版).part2

    6.8.1使用MySQL构建一个队列表251 6.8.2计算两点之间的距离254 6.8.3使用用户自定义函数257 6.9总结258 第7章MySQL高级特性259 7.1分区表259 7.1.1分区表的原理260 7.1.2分区表的类型261 7.1.3如何使用分区...

    2021年MySQL高级教程视频.rar

    17.MySQL高级存储过程语法变量.avi 18.MySQL高级存储过程语法if判断.avi 19.MySQL高级存储过程语法输入参数.avi 20.MySQL高级存储过程语法输出参数.avi 21.MySQL高级存储过程语法case结构.avi 22.MySQL高级存储过程...

    PHP和MySQL Web开发第4版pdf以及源码

    12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么时候生效 12.2 提高MySQL数据库的安全性 12.2.1 从操作系统角度来保护MySQL 12.2.2 密码 12.2.3 用户权限 12.2.4 Web问题 12.3 获取更多...

    mysql数据库my.cnf配置文件

    #MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中, # 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户...

    PHP和MySQL WEB开发(第4版)

    12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么时候生效 12.2 提高MySQL数据库的安全性 12.2.1 从操作系统角度来保护MySQL 12.2.2 密码 12.2.3 用户权限 12.2.4 Web问题 12.3 获取更多关于数据库...

    MYSQL培训经典教程(共两部分) 1/2

    4 1.1.5总结 5 1.2 关系数据库管理系统 5 1.2.1 关系数据库系统 6 1.2.2 数据库系统的发展 7 1.2.3 与数据库系统通讯 8 1.2.4 MySQL的体系结构 8 1.2.5总结 8 1.3 MYSQL使用的SQL语言 9...

    mysql5.7.15安装配置方法图文教程.docx

    这篇文章是我总结其他人安装 MySQL 5.7.15 的方法总结最直截了当的安装配置方法, 希望对一开始接受 MySQL 朋友有所帮助。 一、下载软件 1.软件下载可以进官网直接下载,进入 mysql 官网,登陆自己的 oracle ...

    MySQL核心技术视频.zip

    14_总结MySQL常见命令 15_MySQL语法规范介绍 16_图形化用户界面客户端的安装 17_图形化用户界面客户端的介绍 18_myemployees库的四张表介绍 19_基础查询介绍 20_查询表中的字段 21_查询时的细节注意补充 22_查询常量...

    MYSQL学习.edf

    mysql基础学习的知识点总结大纲edf电子笔记版。包括数据库mysql的简介、DQl语言、DMl语言、DDl语言、TCl语言以及视图、变量、存储过程和函数、流程控制结构一系类的总结

    PHP和MySQL Web开发第4版

    12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么时候生效 12.2 提高MySQL数据库的安全性 12.2.1 从操作系统角度来保护MySQL 12.2.2 密码 12.2.3 用户权限 12.2.4 Web问题 12.3 获取更多...

    MySql中特殊运算符的使用方法总结

    这个大家应该都比较熟悉,但本文给大家总结介绍的关于MySql中特殊运算符的相关内容,下面话不多说了,来一起看看详细的介绍吧 1. <=> 安全比较运算符 mysql中任何与NULL做比较都会是NULL,常用来做判断是否是...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    1.6.2 mysql5.5存储过程支持limit变量 54 1.7 mysql5.1升级为mysql5.5 55 1.7.1 采用mysql_upgrade升级授权表方式升级 55 1.7.2 直接安装mysql5.5,采用数据导出/导入方式升级 59 1.8 性能测试:mysql5.5与...

    MYSQL培训经典教程(共两部分) 2/2

    4 1.1.5总结 5 1.2 关系数据库管理系统 5 1.2.1 关系数据库系统 6 1.2.2 数据库系统的发展 7 1.2.3 与数据库系统通讯 8 1.2.4 MySQL的体系结构 8 1.2.5总结 8 1.3 MYSQL使用的SQL语言 9...

    mysql中coalesce()的使用技巧小结

    最近无意间发现mysql的coalesce,又正好有时间,就把mysql中coalesce()的使用技巧总结下分享给大家,下面来一起看看详细的介绍: coalesce()解释 返回参数中的第一个非空表达式(从左向右依次类推); 使用示例 a,b,...

    关于MySQL性能调优你必须了解的15个重要变量(小结)

    本文作者总结梳理MySQL性能调优的15个重要变量,又不足需要补充的还望大佬指出。 1.DEFAULT_STORAGE_ENGINE 如果你已经在用MySQL 5.6或者5.7,并且你的数据表都是InnoDB,那么表示你已经设置好了。如果没有,确保把...

    安装resin+mysql+IIS+JDK的总结

    工作总结:安装resin+mysql+IIS+JDK的总结一、首先安装JDK:一)、下载j2re-1_4_1_02-windows-i586-i.exe,然后直接安装。二)、安装完配置环境变量:PATH:C:\JDK\BIN;CLASSPATH:C:\JDK\LIB\TOOLS.JAR;C:\JDK\LIB\...

Global site tag (gtag.js) - Google Analytics