MySQL में दो प्रकार के वेरिएबल होते हैं: **यूजर-डिफाइंड (सत्र-विशिष्ट) वेरिएबल** और **लोकल वेरिएबल**। इनके स्कोप, जीवनचक्र और उपयोग में महत्वपूर्ण अंतर हैं।
यूजर-डिफाइंड वेरिएबल (सत्र-विशिष्ट)
विशेषताएं
- प्रीफिक्स:
@(उदाहरण:@myVar) - स्कोप: वर्तमान सत्र/कनेक्शन
- जीवनचक्र: सत्र समाप्त होने तक मान बरकरार रहता है
- टाइपिंग: ढीली टाइपिंग (स्वचालित रूपांतरण)
- दृश्यता: केवल उसी सत्र में दिखते हैं, अन्य उपयोगकर्ता नहीं देख सकते
आरंभीकरण के दो तरीके
-- तरीका 1: SET कमांड
SET @myVar = 10;
-- तरीका 2: SELECT में := ऑपरेटर
SELECT @myVar := 10;
⚠️ सामान्य गलती
SELECT @m = 10; -- यह तुलना है! परिणाम: 1 (TRUE)
:= असाइनमेंट है, = तुलना है (SELECT में)।
लोकल वेरिएबल
विशेषताएं
- कोई प्रीफिक्स नहीं (उदाहरण:
myVar) - स्कोप: स्टोर्ड प्रोसीजर/फंक्शन/ट्रिगर ब्लॉक (BEGIN...END)
- जीवनचक्र: प्रत्येक कॉल पर पुनः आरंभ (NULL या डिफॉल्ट मान)
- घोषणा:
DECLAREआवश्यक - टाइपिंग: सख्त (डेटा टाइप घोषित करना पड़ता है)
सिंटैक्स
DECLARE yourVariableName DATA_TYPE [DEFAULT default_value];
मुख्य अंतर
| विशेषता | यूजर-डिफाइंड (@var) | लोकल (DECLARE) |
|---|---|---|
| स्कोप | सत्र (कनेक्शन) | BEGIN...END ब्लॉक |
| जीवनचक्र | सत्र समाप्ति तक | प्रत्येक कॉल पर रीसेट |
| प्रीफिक्स | @ आवश्यक | कोई नहीं |
| घोषणा | आवश्यक नहीं | DECLARE आवश्यक |
| डेटा टाइप | नहीं (ढीला) | हाँ (सख्त) |
| दृश्यता | सत्र-निजी | ब्लॉक-निजी |
| उपयोग स्थान | कहीं भी सत्र में | केवल प्रोसीजर/फंक्शन/ट्रिगर में |
व्यावहारिक डेमो: स्टोर्ड प्रोसीजर में दोनों
DELIMITER //
CREATE PROCEDURE sp_LocalAndUserDefinedVariableDemo()
BEGIN
DECLARE localVariable INT DEFAULT 10;
SET localVariable = localVariable + 10;
SET @userVariable = @userVariable + 10;
SELECT localVariable;
SELECT @userVariable;
END //
DELIMITER ;
-- यूजर वेरिएबल सेट करें
SET @userVariable = 10;
-- पहली कॉल
CALL sp_LocalAndUserDefinedVariableDemo();
-- localVariable: 20 (10+10)
-- @userVariable: 20 (10+10)
-- दूसरी कॉल
CALL sp_LocalAndUserDefinedVariableDemo();
-- localVariable: 20 (फिर से 10+10, रीसेट हुआ)
-- @userVariable: 30 (20+10, मान बरकरार)
-- तीसरी कॉल
CALL sp_LocalAndUserDefinedVariableDemo();
-- localVariable: 20 (फिर से 10+10)
-- @userVariable: 40 (30+10)
कब क्या उपयोग करें?
यूजर-डिफाइंड वेरिएबल (@var) उपयोग करें जब:
- सत्र के दौरान मान साझा करना हो
- कई क्वेरी/प्रोसीजर के बीच मान पास करना हो
- त्वरित गणना/डीबगिंग के लिए
लोकल वेरिएबल (DECLARE) उपयोग करें जब:
- स्टोर्ड प्रोसीजर/फंक्शन में अस्थायी गणना
- प्रत्येक कॉल पर स्वच्छ स्थिति चाहिए
- सख्त टाइपिंग आवश्यक हो
- कोड पठनीयता और रखरखाव
नोट
- यूजर वेरिएबल सत्र समाप्त होने पर नष्ट हो जाते हैं
- एक उपयोगकर्ता का @var दूसरा उपयोगकर्ता नहीं देख सकता
- MySQL 8.0+ में
SET PERSISTसे ग्लोबल वेरिएबल भी सेट कर सकते हैं