[转]mysql变量使用总结
From : http://www.cnblogs.com/wangtao_20/archive/2011/02/21/1959734.html
set语句的学习:
使用select定义用户变量的实践
将如下语句改成select的形式:
set @VAR=(select sum(amount) from penalties);
我的修改:
select @VAR:=(select sum(amount) from penalties);
我这样改,虽然是可以的。但是,对比的书中的答案,发现这样的方式太蹩脚了。说明没有很好地理解select定义变量的本质。
在select中,发现有一个用户变量,如果没有定义,那么就会初始化。
select子句原来的方式根本不受到影响。只是增加了用户变量。所以,还是按照原来的方式使用select子句。那么像:select sum(amount) from penalties。增加变量就成
了:select @VAR:=sum(amount) from penalties。
将sum(amount)的结果赋给变量@VAR:。变量前面有select,那用户么就是显示该变量了。
笔记部分:mysql变量的术语分类:
1.用户变量:以"@"开始,形式为"@变量名"
用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
2.全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名 或者 set @@global.变量名
对所有客户端生效。只有具有super权限才可以设置全局变量
3.会话变量:只对连接的客户端有效。
4.局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量
declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量
通俗理解术语之间的区别:
用户定义的变量就叫用户变量。这样理解的话,会话变量和全局变量都可以是用户定义的变量。只是他们是对当前客户端生效还是对所有客户端生效的区别了。所以,用户变量包括了会话变量和全局变量
局部变量与用户变量的区分在于两点:1.用户变量是以"@"开头的。局部变量没有这个符号。2.定义变量不同。用户变量使用set语句,局部变量使用declare语句定义 3.作用范围。局部变量只在begin-end语句块之间有效。在begin-end语句块运行完之后,局部变量就消失了。
所以,最后它们之间的层次关系是:变量包括局部变量和用户变量。用户变量包括会话变量和全局变量。
使用备忘,set @var 若没有指定GLOBAL 或SESSION ,那么默认将会定义用户变量
两种方式定义用户变量:
1."=",如 set @a =3,@a:=5
2.":="。select常常这样使用
总结:使用select 和set设置变量的区别,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这样没有符号的情况?看书籍《SQL For MySQL Developers A Comprehensive Tutorial and Reference》大致说明的原因,这样做是为了与其他的SQL产品保持一致。
[转]mysql变量使用总结的更多相关文章
- MySQL服务 - MySQL变量类型及变量设置
一.MySQL变量类型: MySQL通过变量来定义当前服务器的特性,保存状态信息等.我们可以通过手动更改变量的值来配置MySQL,也可以通过变量获得MySQL的当前状态信息.MySQL的变量类型可以从 ...
- mysql变量使用总结
set语句的学习: 使用select定义用户变量的实践将如下语句改成select的形式: set @VAR=(select sum(amount) from penalties);我的修改: sele ...
- 十大最值得注意的MySQL变量
MySQL数据库中的变量非常多,下文为您整理出了十大最值得注意的MySQL变量,希望对您学习MySQL数据库能够有一些帮助. AD: MySQL变量很多,其中有一些MySQL变量非常值得我们注意,下面 ...
- mysql变量使用总结(转)
set语句的学习: 使用select定义用户变量的实践将如下语句改成select的形式: set @VAR=(select sum(amount) from penalties);我的修改: sele ...
- MySQL变量的使用
在mysql文档中,mysql变量可分为两大类,即系统变量和用户变量. 但根据实际应用又被细化为四种类型,即局部变量.用户变量.会话变量和全局变量. 一.局部变量 mysql局部变量,只能用在begi ...
- MariaDB MySQL变量取值避免四舍五入的方法
MySQL变量取值避免四舍五入的方法 By:授客 QQ:1033553122 在一些对数据精确度要求比较高的场景(比如资金结算)下,变量取值时不能对变量值进行四舍五入操作,这时候就要做些预处理工作. ...
- [MySQL] 变量(参数)的查看和设置 [转]
[MySQL] 变量(参数)的查看和设置 类似于Oracle的参数文件,MySQL的选项文件(如my.cnf)用于配置MySQL服务器,但和Oracle叫法不一样,在MySQL里, 官方叫变量(Var ...
- Mysql 变量讲解
set语句的学习: 使用select定义用户变量的实践将如下语句改成select的形式: set @VAR=(select sum(amount) from penalties);我的修改: sele ...
- 黑马MySQL数据库学习day04 MySQL变量 存储过程 用户和授权管理
/* MySQL中的变量局部变量,用户变量,会话变量和全局变量. 用户变量不用定义,直接使用. 1.用户变量赋值 set @xxx = 值; 2.查询 select @xxx; 语法帮助: 过程保存在 ...
随机推荐
- sql 多表查询结果验证
1.笛卡尔积 定义: 设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成的集合 ,叫做A与B的笛卡尔积,记作AxB. 上面有一个很关键的词为“有序”,因此,我们 ...
- 002.NFS相关配置项
一 配置文件(/etc/exports) 1.1 配置文件格式 <输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)] 二 输出目录 ...
- 开发人员如何正确对待BUG?
1.前端开发与后端开发 出了问题,最重要的是先找到方法迅速解决,而不是去互相指责.前端存在这样的思维模式,后端也存在这样的思维模式,这种思维模式不太好.出了问题,最好先检查一下自己,反省是不是自己这 ...
- opesntack 底层共享存储 迁移配置
底层共享存储在迁移配置: 每台compute 节点都需要配置一下 让nova用户可以登陆 usermod -s /bin/bash nova 设置nova 用户密码 echo "nova&q ...
- web实践小项目<一>:简单日程管理系统(涉及html/css,javascript,python,sql,日期处理)
暑假自学了些html/css,javascript和python,苦于学完无处练手几乎过目即忘...最后在同学的建议下做了个简单日程管理系统.借第一版完成之际,希望能将实践期间犯过的错误和获得的新知进 ...
- BZOJ.3522.[POI2014]Hotel(DP)
题目链接 BZOJ 洛谷 以为裸点分治,但数据范围怎么这么小?快打完了发现不对.. n^2做的话其实是个水题.. 枚举每一个点为根,为了不重复计算,我们要求所求的三个点必须分别位于三棵子树上. 考虑当 ...
- CentOS 7使用yum安装PHP5.6
删除旧php包 yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbs ...
- 【转】Java类成员变量默认初始化规则
一个变量作为类成员使用的时候,如果没有被初始化,java会为其分配默认值: -------------------------------------------------------------- ...
- AspNetPager 控件使用
使用方法: 1.添加对AspNetPager.dll的引用 2.在页面上拖放控件 3. <%@ Register assembly="AspNetPager" namespa ...
- [置顶] Android系统移植与调试之------->build.prop文件详细赏析
小知识:什么是build.prop? /system/build.prop 是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件.这个文件是如 ...