mysql变量使用总结

来源:未知 责任编辑:责任编辑 发表时间:2013-12-01 14:21 点击:

 

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-mmm
  • mysqldump命令——MySQL数据库备份还原
  • Oracle数据导入MySQL的快捷工具:MySQL Migration Toolkit
  • 简简单单储存过程——循环一个select结果集
  • MySQL数据库十大优化技巧
  • Mysql主主复制架构配置
  • Mysql安装笔记
  • MySQL Stmt预处理提高效率问题的小研究
  • Mysql的Procedure 参数为NULL问题分析
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1