MySQL में CREATE TEMPORARY TABLE ... SELECT: क्वेरी परिणाम से अस्थायी टेबल बनाना
किसी SELECT क्वेरी के परिणाम से सीधे एक अस्थायी टेबल बनाने के लिए CREATE TEMPORARY TABLE ... AS SELECT (या CREATE TEMPORARY TABLE ... SELECT) वाक्यविन्यास का उपयोग करें।
उदाहरण के साथ पूर्ण कार्यान्वयन
स्रोत टेबल बनाना
mysql> CREATE TABLE DemoTable1 (Id INT, Name VARCHAR(100));
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable1 VALUES(100, 'John'), (110, 'Chris'), (120, 'Robert'), (130, 'David');
स्रोत टेबल देखना
mysql> SELECT * FROM DemoTable1;
आउटपुट:
+------+--------+
| Id | Name |
+------+--------+
| 100 | John |
| 110 | Chris |
| 120 | Robert |
| 130 | David |
+------+--------+
4 rows in set (0.00 sec)
अस्थायी टेबल बनाना
mysql> CREATE TEMPORARY TABLE DemoTable2 SELECT * FROM DemoTable1;
परिणाम: Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0
अस्थायी टेबल देखना
mysql> SELECT * FROM DemoTable2;
आउटपुट:
+------+--------+
| Id | Name |
+------+--------+
| 100 | John |
| 110 | Chris |
| 120 | Robert |
| 130 | David |
+------+--------+
4 rows in set (0.00 sec)
अस्थायी टेबल की विशेषताएं:
- सत्र-विशिष्ट: केवल वर्तमान कनेक्शन के लिए दृश्यमान
- स्वचालित सफाई: कनेक्शन बंद होने पर स्वतः ड्रॉप हो जाती है
- नाम संघर्ष नहीं: अलग सत्र समान नाम की अस्थायी टेबल बना सकते हैं
- कोई लॉक संघर्ष नहीं: अन्य सत्र प्रभावित नहीं होते
वाक्यविन्यास विविधताएं
-- 1. AS SELECT (मानक SQL)
CREATE TEMPORARY TABLE temp_table AS SELECT * FROM source_table;
-- 2. SELECT बिना AS (MySQL विशिष्ट)
CREATE TEMPORARY TABLE temp_table SELECT * FROM source_table;
-- 3. कॉलम परिभाषा के साथ (नियंत्रण के लिए)
CREATE TEMPORARY TABLE temp_table (
Id INT PRIMARY KEY,
Name VARCHAR(100)
) SELECT Id, Name FROM source_table;
उपयोग के मामले
- जटिल क्वेरी के मध्यवर्ती परिणाम स्टोर करना
- बड़े परिणाम सेट को चरणों में प्रोसेस करना
- एकाधिक क्वेरी में समान सबसेट पुनः उपयोग करना
- ट्रांजैक्शन-सुरक्षित मध्यवर्ती भंडारण
सीमाएं
- विदेशी कुंजी कंस्ट्रेंट समर्थित नहीं
- पार्टीशनिंग समर्थित नहीं
- रेप्लिकेशन में विशेष व्यवहार (binlog फॉर्मेट पर निर्भर)
SHOW TABLESमें डिफ़ॉल्ट रूप से नहीं दिखती (SHOW TEMPORARY TABLESउपयोग करें)
CTE (Common Table Expressions) विकल्प (MySQL 8.0+)
WITH temp_result AS (
SELECT * FROM DemoTable1 WHERE Id > 105
)
SELECT * FROM temp_result;
CTE केवल क्वेरी अवधि के लिए मौजूद होता है, टेबल ऑब्जेक्ट नहीं बनाता।