MySQL中声明变量的正确形式是啥:declare vs @ vs set? [复制]
Posted
技术标签:
【中文标题】MySQL中声明变量的正确形式是啥:declare vs @ vs set? [复制]【英文标题】:What is the correct form of declaring variables in MySQL: declare vs @ vs set? [duplicate]MySQL中声明变量的正确形式是什么:declare vs @ vs set? [复制] 【发布时间】:2021-01-16 00:38:43 【问题描述】:我正在尝试学习 mysql,在做了一些数据库之后,我有以下问题。
在过程或函数中声明 变量 时,我可以这样做:
-
使用
@
符号,像这样:SET @varname = varcontent
使用DECLARE
关键字,像这样:DECLARE varname vartype
直接使用SET
而不使用DECLARE
,像这样SET varname = varcontent
我的疑问是:
哪种类型的语法是正确的,使用DECLARE
、@
或SET
?
正确的做法是什么?
另外,我希望您能推荐一些关于 MySQL 的良好做法。
【问题讨论】:
如果您不声明 varname,您的第三个选项将失败。 【参考方案1】:
varname
和 @varname
是两个不同的变量!
@varname
- 用户定义的变量。
一直存在。即使它没有被初始化和/或使用,在这种情况下它也有 NULL 值。 IE。它不需要在声明中。
没有数据类型(或者它有动态数据类型)。通过分配另一个数据类型的值可以轻松更改数据类型。
此变量具有连接范围。 IE。它在连接存在之前一直存在,并且在显式更改之前不会更改其值。每个连接都有自己的同名变量,它们不会相互干扰。
例如,您可以将其设置为某个值,然后在调用的存储过程中使用/更改此值,然后在过程完成后在外部代码中使用过程中更改的值。
varname - 本地(声明的)变量
不存在于匿名代码中,仅存在于复合(BEGIN-END)代码块中。必须在块的开头显式声明。在区块结束时被销毁。局部变量的特殊类型是函数/过程参数 - 它在函数/过程头中声明并存在于函数/过程代码块中。
具有明确的数据类型。无法重新声明。
具有定义的块的范围。
如果某个范围内存在同名的变量和列,则该变量具有优先级并屏蔽该列,因此如果需要访问该列,则必须指定表别名。
在大多数构造中,可以使用任何变量类型。但有时只能使用其中一种类型 - 请参阅用户手册。
1. 像
set @varname= varcontent
一样使用@
这个语句用一些值初始化用户定义的变量。
2. 使用
declare varname vartype
之类的声明
此语句声明局部变量。可能位于 BEGIN-END 块的开头。不为变量设置值(为 NULL)。
3.直接使用
set varname=varcontent
而不声明
导致错误。
【讨论】:
感谢帮助以上是关于MySQL中声明变量的正确形式是啥:declare vs @ vs set? [复制]的主要内容,如果未能解决你的问题,请参考以下文章