MySQL डॉक्स फ्लो कंट्रोल स्टेटमेंट पर कहना:
संग्रहीत कार्यक्रम और दृश्य पर दस्तावेज़ कहना:
तो, ऐसा लगता है कि आप केवल एक संग्रहीत कार्यविधि, फ़ंक्शन या ट्रिगर के भीतर एक स्पष्ट लूप चला सकते हैं।
आप अपने SQL कथन में जो करते हैं उसके आधार पर, संख्याओं की तालिका (या दृश्य) का उपयोग करना स्वीकार्य हो सकता है (mysql में "नंबर टेबल" बनाना , MYSQL:अनुक्रमिक संख्या तालिका )
अगर आपकी क्वेरी SELECT
है और अपने SELECT
. का परिणाम लौटाना ठीक है एक लंबे परिणाम सेट के 10 गुना (10 अलग परिणाम सेट के विपरीत) आप कुछ इस तरह कर सकते हैं:
SELECT MainQuery.*
FROM
(
SELECT 1 AS Number
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10
) AS Numbers
CROSS JOIN
(
SELECT 'some data' AS Result
) AS MainQuery
INSERT के लिए उदाहरण
मैं आपके डेटाबेस में संख्याओं की एक स्थायी तालिका रखने की सलाह देता हूं। यह कई मामलों में उपयोगी है। ऊपर दिए गए लिंक देखें कि इसे कैसे जेनरेट किया जाए।
इसलिए, यदि आपके पास एक तालिका है Numbers
int
. के साथ कॉलम Number
1 से मान के साथ, मान लें, 100K (जैसा मैं करता हूं), और इस कॉलम पर प्राथमिक कुंजी, फिर इस लूप के बजाय:
DECLARE count INT DEFAULT 0;
WHILE count < 10 DO
INSERT INTO table_name(col1,col2,col3)
VALUES("val1","val2",count);
SET count = count + 1;
END WHILE;
आप लिख सकते हैं:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
यह भी लगभग 10 गुना तेजी से काम करेगा।