set语句的学习:
用select定义用户变量的实践
将以下语句更改为select形式:
set @VAR=(从罚金中选择sum(amount));
我的修改:
select @VAR:=(从罚金中选择sum(金额));
我可以这样改,虽然有可能。但是,对比书上的答案,我发现这种方式太蹩脚了。说明select定义的变量的本质没有很好的理解。
在select中,发现有一个用户变量,如果没有定义,就会初始化。
select子句的原始方式完全不受影响。仅添加用户变量。因此,select子句仍按原来的方式使用。例如:从养老金中选择sum(金额)。只需添加变量。
the:select @ var:= sum(amount)from pensions。
将sum(amount)的结果赋给变量@VAR:。变量前面有一个select,所以用户只显示变量。
注释部分:mysql变量的术语分类;
1.用户变量:以“@”开头,采用“@变量名”的形式
用户变量绑定到mysql客户端,设置的变量只对当前用户使用的客户端生效。
2.全局变量:定义时,它以以下两种形式出现:set GLOBAL variable name或set @@global。
对所有客户有效。您必须拥有超级权限才能设置全局变量。
3.会话变量:仅对连接的客户端有效。
4.局部变量:动作范围在begin和end语句块之间。语句块中设置的变量
declare语句专用于定义局部变量。Set语句是设置不同类型的变量,包括会话变量和全局变量。
通俗理解术语的区别:
用户定义的变量称为用户变量。这样,会话变量和全局变量都可以是用户定义的变量。只是它们是对当前客户端有效还是对所有客户端有效的区别。因此,用户变量包括会话变量和全局变量。
局部变量和用户变量有两个区别:1 .用户变量以“@”开头。局部变量没有这个符号。2.不同地定义变量。用户变量使用set语句,局部变量使用declare语句定义3。范围。局部变量只在begin-end语句块之间有效。begin-end语句块运行后,局部变量消失。
所以,最后,它们之间的层次关系是,变量包括局部变量和用户变量。用户变量包括会话变量和全局变量。
使用memo时,如果set @var没有指定GLOBAL或SESSION,默认情况下将定义用户变量。
用户变量有两种定义方式:
1.“=”,如set @a =3,@a:=5。
2.":="。Select经常这样用。
总结:使用select和set设置变量的区别。Set可以用以上两种形式设置变量。Select只能以":= "的形式设置变量。
实践积累:mysql客户端退出后,用户变量会自动消失。然后我打开客户端,使用“select @ a;显示的更改值为空。描述,未定义的变量初始化为空& # 65279;
实践中的问题
设置常数对group_concat()配置的影响;
SET @@GROUP_CONCAT_MAX_LEN=4
手册中提到的设置语法如下:
SET[SESSION | GLOBAL]group _ concat _ max _ len = val;
以下两种形式可以达到同样的效果,但有什么区别呢?
设置@@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开发者综合教程及参考》这本书来解释原因,从而与其他SQL产品保持一致。
作者hj714886063
bitsCN.com adminjs.cn是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 Adminjs.cn还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 在Adminjs.cn中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!