我来自前端背景,所以如果这个问题看起来很简单,请耐心等待。
我注意到大多数关于 MySQL 存储过程的帖子都@
用于变量。我知道这意味着该变量是一个会话变量,只要连接处于活动状态,它就会在存储过程中持续存在,但是为什么您希望一个变量在 1 个连接中交叉污染多个存储过程调用?将所有内容本地化不是更好吗?如果我不使用@
,则该变量会在下一次存储的 proc 调用时重新初始化NULL
,这不是更可取吗?这样做是出于性能原因吗?
我来自前端背景,所以如果这个问题看起来很简单,请耐心等待。
我注意到大多数关于 MySQL 存储过程的帖子都@
用于变量。我知道这意味着该变量是一个会话变量,只要连接处于活动状态,它就会在存储过程中持续存在,但是为什么您希望一个变量在 1 个连接中交叉污染多个存储过程调用?将所有内容本地化不是更好吗?如果我不使用@
,则该变量会在下一次存储的 proc 调用时重新初始化NULL
,这不是更可取吗?这样做是出于性能原因吗?
@ 符号指定一个用户定义的变量。看来您已经阅读了有关此内容的手册,但无论如何我都会发布此摘录。
您可以在一个语句中将值存储在用户定义的变量中,然后稍后在另一个语句中引用它。这使您能够将值从一个语句传递到另一个语句。用户定义的变量是特定于连接的。也就是说,一个客户端定义的用户变量不能被其他客户端看到或使用。当客户端退出时,给定客户端连接的所有变量都会自动释放。
如果您在单个连接中有多个存储过程调用,您应该非常清楚在整个请求中何时以及是否对变量的值进行了任何重新定义时使用了哪些变量。此外,您应该在某些条件下使用事务,这也有助于确保在其中定义的 UDV 在请求的生命周期内不会被外部来源损坏。