为什么在MySQL中在变量前面使用@?

为什么在MySQL中在变量前面使用@?,mysql,Mysql,可能重复: 我来自前端的背景,所以请容忍我,如果这个问题似乎是基本的 我注意到MySQL存储过程上的大多数帖子都使用@作为变量。我知道这意味着该变量是一个会话变量,只要连接处于活动状态,跨存储过程的会话变量就会一直存在,但为什么希望一个变量在一个连接中交叉污染多个存储过程调用?把一切都本地化不是更好吗?如果我不使用@,那么在下一次存储的proc调用中将变量重新初始化为NULL,这不是更可取吗?这样做是出于性能原因吗?符号@表示一个。看起来你已经读过这方面的手册了,但我还是会发布这篇摘录 可以在

可能重复:

我来自前端的背景,所以请容忍我,如果这个问题似乎是基本的

我注意到MySQL存储过程上的大多数帖子都使用
@
作为变量。我知道这意味着该变量是一个会话变量,只要连接处于活动状态,跨存储过程的会话变量就会一直存在,但为什么希望一个变量在一个连接中交叉污染多个存储过程调用?把一切都本地化不是更好吗?如果我不使用
@
,那么在下一次存储的proc调用中将变量重新初始化为
NULL
,这不是更可取吗?这样做是出于性能原因吗?

符号@表示一个。看起来你已经读过这方面的手册了,但我还是会发布这篇摘录

可以在一条语句中的用户定义变量中存储值,然后在另一条语句中引用该值。这使您能够将值从一个语句传递到另一个语句。用户定义的变量是特定于连接的。也就是说,一个客户端定义的用户变量不能被其他客户端看到或使用。给定客户端连接的所有变量在该客户端退出时自动释放


如果在一个连接中有多个存储过程调用,则应该非常清楚在整个请求过程中是否重新定义了变量的值,以及何时使用了哪些变量。此外,您应该在某些条件下使用事务,这也有助于确保在请求的整个生命周期内,内定义的UDV不会从外部源损坏。

为什么您希望一个变量在一个连接内交叉污染多个存储的过程调用
我没有得到这一点。添加变量是如何做到这一点的?@Ibu我的意思是,如果在一个存储过程中,您确实设置了
@foo=“bar”
,那么在同一连接中的下一个存储过程中,
@foo
仍将设置为“bar”谢谢,但这并不能告诉我为什么我应该或不应该在变量中使用
@
,除非文档这么说?如果我不使用
@
,那么在下一次存储的proc调用中将变量重新初始化为
NULL
,这不是更可取吗?