जवाबों:
MySQL में मुख्य रूप से तीन प्रकार के चर हैं:
उपयोगकर्ता-परिभाषित चर (साथ उपसर्ग @
):
आप किसी भी उपयोगकर्ता-परिभाषित चर को घोषित किए बिना या इसे आरंभ किए बिना एक्सेस कर सकते हैं। यदि आप एक ऐसे चर का संदर्भ देते हैं, जिसे आरंभिक नहीं किया गया है, तो इसका एक मान NULL
और एक प्रकार का स्ट्रिंग है।
SELECT @var_any_var_name
आप किसी वेरिएबल SET
या SELECT
स्टेटमेंट का उपयोग करके इनिशियलाइज़ कर सकते हैं
SET @start = 1, @finish = 10;
या
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
उपयोगकर्ता चर को डेटा प्रकारों के सीमित सेट से एक मान दिया जा सकता है: पूर्णांक, दशमलव, फ़्लोटिंग-पॉइंट, बाइनरी या नॉनबिनरी स्ट्रिंग, या NULL मान।
उपयोगकर्ता-परिभाषित चर सत्र-विशिष्ट हैं। अर्थात्, एक क्लाइंट द्वारा परिभाषित उपयोगकर्ता चर को अन्य क्लाइंट द्वारा देखा या उपयोग नहीं किया जा सकता है।
उन्हें उन्नत MySQL उपयोगकर्ता चर तकनीकोंSELECT
का उपयोग करके प्रश्नों में इस्तेमाल किया जा सकता है ।
स्थानीय चर (कोई उपसर्ग नहीं):
स्थानीय चर का उपयोग करने DECLARE
से पहले इसे घोषित करने की आवश्यकता है।
उन्हें स्थानीय चर के रूप में इस्तेमाल किया जा सकता है और एक संग्रहीत प्रक्रिया के अंदर इनपुट पैरामीटर:
DELIMITER //
CREATE PROCEDURE sp_test(var1 INT)
BEGIN
DECLARE start INT unsigned DEFAULT 1;
DECLARE finish INT unsigned DEFAULT 10;
SELECT var1, start, finish;
SELECT * FROM places WHERE place BETWEEN start AND finish;
END; //
DELIMITER ;
CALL sp_test(5);
यदि DEFAULT
खंड अनुपलब्ध है, तो प्रारंभिक मान है NULL
।
स्थानीय चर का दायरा वह BEGIN ... END
ब्लॉक होता है जिसके भीतर यह घोषित किया जाता है।
सर्वर सिस्टम चर (साथ उपसर्ग @@
):
MySQL सर्वर डिफ़ॉल्ट मान के लिए कॉन्फ़िगर किए गए कई सिस्टम चर बनाए रखता है । वे प्रकार के हो सकते हैं GLOBAL
, SESSION
या BOTH
।
वैश्विक चर सर्वर के संपूर्ण संचालन को प्रभावित करते हैं जबकि सत्र चर व्यक्तिगत क्लाइंट कनेक्शन के लिए इसके संचालन को प्रभावित करते हैं।
किसी चालू सर्वर द्वारा उपयोग किए जाने वाले वर्तमान मानों को देखने के लिए, SHOW VARIABLES
कथन का उपयोग करें या SELECT @@var_name
।
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;
उन्हें कमांड लाइन पर या एक विकल्प फ़ाइल में विकल्पों का उपयोग करके सर्वर स्टार्टअप पर सेट किया जा सकता है। सर्वर का उपयोग करते हुए SET GLOBAL
या चलने पर उनमें से अधिकांश को गतिशील रूप से बदला जा सकता है SET SESSION
:
-- Syntax to Set value to a Global variable:
SET GLOBAL sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000;
-- Syntax to Set value to a Session variable:
SET sort_buffer_size=1000000;
SET SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@local.sort_buffer_size=10000;
=
ऑपरेटर मेरे लिए काम नहीं किया। जब मैंने :=
ऑपरेटर का उपयोग किया तो यह ठीक काम कर रहा था ।
=
ऑपरेटर केवल SET
क्लॉज में काम करता है । SELECT
क्वेरी में एक वैरिएबल के लिए मान निर्दिष्ट करने के लिए आप :=
ऑपरेटर का उपयोग कर सकते हैं जैसेSELECT @start := 1
सेट
SET @var_name = value
या
SET @var := value
दोनों ऑपरेटरों = और : = स्वीकार किए जाते हैं
चुनते हैं
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
यदि एकाधिक रिकॉर्ड सेट में पाया गया कि col2 में केवल अंतिम मान है (ओवरराइड);
SELECT col1, col2 INTO @var_name, col3 FROM .....
इस मामले में चयन का परिणाम col2 मानों से युक्त नहीं है
पूर्व दोनों तरीकों का इस्तेमाल किया
- TRIGGER_BEFORE_INSERT --- गणना से एक स्तंभ मान सेट करना
...
SELECT count(*) INTO @NR FROM a_table WHERE a_condition;
SET NEW.ord_col = IFNULL( @NR, 0 ) + 1;
...
=
और :=
?
SELECT DISTINCT IFNULL(@var:=Name,'unknown') FROM Customers ORDER BY <some non-indexed expression> LIMIT 10
ऑर्डर-बाय होने से पहले वेरिएबल असाइनमेंट का मूल्यांकन करने के लिए प्रकट होता है, ताकि @var का लौटा मूल्य भी किसी भी लौटी पंक्तियों से संबंधित न हो। डॉक्स यह नहीं बताता है कि यह किन परिस्थितियों में हो सकता है।
सेट या चयन का उपयोग करें
SET @counter := 100;
SELECT @variable_name := value;
उदाहरण :
SELECT @price := MAX(product.price)
FROM product
विभिन्न प्रकार के चर:
DECLARE को केवल BEGIN ... END कंपाउंड स्टेटमेंट के अंदर जाने की अनुमति है और किसी भी अन्य स्टेटमेंट से पहले इसकी शुरुआत में होना चाहिए।
इसलिए, यदि आप एक संग्रहीत प्रोग्राम को परिभाषित कर रहे हैं और वास्तव में "स्थानीय चर" चाहते हैं, तो आपको @ वर्ण को छोड़ना होगा और यह सुनिश्चित करना होगा कि आपका DECLARE स्टेटमेंट आपके प्रोग्राम ब्लॉक की शुरुआत में है। अन्यथा, "उपयोगकर्ता चर" का उपयोग करने के लिए, DECLARE स्टेटमेंट को छोड़ दें।
इसके अलावा, आपको या तो इसे अपनी अधीनता के रूप में निष्पादित करने के लिए कोष्ठक में अपनी क्वेरी को घेरना होगा:
SET @countTotal = (SELECT COUNT (*) FROM nGrams);
या फिर, आप SELECT ... INTO: का उपयोग कर सकते हैं
चयनित COUNT (*) में @countTotal से nGrams;
किसी भी व्यक्ति के लिए concat_ws फ़ंक्शन में @variable का उपयोग समवर्ती मान प्राप्त करने के लिए, इसे खाली मान के साथ फिर से संगठित करना न भूलें। अन्यथा यह एक ही सत्र के लिए पुराने मूल्य का उपयोग कर सकता है।
Set @Ids = '';
select
@Ids := concat_ws(',',@Ids,tbl.Id),
tbl.Col1,
...
from mytable tbl;
declare Regione int;
set Regione=(select id from users
where id=1) ;
select Regione ;