2012-11-27 48 views
0

可能重複:
MySQL: @variable vs. variable. Whats the difference?爲什麼在MySQL中使用@前面的變量?

我從前端背景來得這麼容忍我,如果這個問題似乎基本。

我注意到MySQL存儲過程中的大部分帖子都使用@作爲變量。我知道這意味着變量是一個會話變量,只要連接處於活動狀態,跨存儲過程就會一直存在,但爲什麼你想要一個變量交叉污染一個連接中的多個存儲過程?把一切都本地化好不好嗎?如果我不使用@,則變量在下次存儲的proc調用中重新初始化爲NULL,是不是更理想?這是爲了性能原因嗎?

+0

'你爲什麼想要一個變量交叉污染多個存儲的proc調用在1個連接中'我沒有得到。如何添加一個變量做到這一點? – Ibu

+1

@Ibu我的意思是這樣的,如果在一個存儲過程中,你執行SET @foo =「bar」,然後在同一連接的下一個存儲過程中,@ foo'仍然會被設置爲「bar」 – pixelfreak

回答

1

@符號表示User-Defined Variable。看起來你已經閱讀了這個手冊條目,但是我會發布這個摘錄。

您可以將值存儲在用戶定義的變量中的一個語句中,然後在另一個語句中引用它。這使您可以將值從一個語句傳遞到另一個語句。用戶定義的變量是連接特定的。也就是說,一個客戶端定義的用戶變量不能被其他客戶端看到或使用。客戶端連接的所有變量在客戶端退出時自動釋放。

如果在單個連接中有多個存儲過程調用,那麼應該非常清楚在整個請求中何時重新定義了變量值的情況下使用了哪些變量。此外,您應該在某些條件下使用交易,這也有助於確保在請求期限內定義的UDV不受外部來源的破壞。

+1

謝謝,但這並不告訴我爲什麼我應該或不應該在變量中使用'@',除非文檔是這樣說的?如果我不使用'@',變量在下次存儲的proc調用時重新初始化爲'NULL',是不是更理想? – pixelfreak

相關問題