SQLite
 sql >> डेटाबेस >  >> RDS >> SQLite

जेनरेटेड कॉलम क्या है?

कुछ डेटाबेस मैनेजमेंट सिस्टम (DBMS) में जनरेटेड कॉलम नामक एक फीचर शामिल होता है।

"गणना किए गए कॉलम" के रूप में भी जाना जाता है, जेनरेट किए गए कॉलम सामान्य कॉलम के समान होते हैं, सिवाय इसके कि जेनरेट किए गए कॉलम का मान एक अभिव्यक्ति से प्राप्त होता है जो अन्य कॉलम से मानों की गणना करता है।

दूसरे शब्दों में, जेनरेट किए गए कॉलम के मान की गणना दूसरे कॉलम से की जाती है।

उदाहरण

जेनरेट किए गए कॉलम कैसे काम करते हैं, यह दिखाने के लिए यहां एक बुनियादी उदाहरण दिया गया है।

CREATE TABLE Products( 
    Id INTEGER PRIMARY KEY, 
    Name TEXT,
    Qty INT,
    Price INT,
    TotalValue INT GENERATED ALWAYS AS (Qty * Price)
);

यह उदाहरण SQLite में बनाया गया था और जेनरेट कॉलम बनाने के लिए SQLite सिंटैक्स का उपयोग करता है। यह सिंटैक्स GENERATED ALWAYS . का उपयोग करता है स्तंभ-बाधा।

GENERATED ALWAYS भाग SQLite में वैकल्पिक है, इसलिए आप बस AS . का उपयोग कर सकते हैं .

दरअसल, GENERATED ALWAYS भाग MySQL में भी वैकल्पिक है, और यह TSQL (SQL सर्वर के लिए SQL एक्सटेंशन) में भी परिभाषित नहीं है, इसलिए AS कीवर्ड आपको चाहिए (वास्तविक अभिव्यक्ति के साथ)।

अभिव्यक्ति वह है जो कॉलम के वास्तविक मूल्य को निर्धारित करती है। मेरे उदाहरण में, वह भाग जो (Qty * Price) . पढ़ता है वह व्यंजक है जो उस मान को निर्धारित करता है।

इस मामले में, यह केवल प्रत्येक उत्पाद की कीमत के साथ मात्रा (प्रत्येक उत्पाद की संख्या) को गुणा कर रहा है।

इसलिए इस जेनरेट किए गए कॉलम में इन्वेंट्री में प्रत्येक स्टॉक का कुल मूल्य होता है।

यदि हम डेटा सम्मिलित करते हैं और उसका चयन करते हैं, तो हम जेनरेट किए गए कॉलम का परिकलित मान देख सकते हैं।

INSERT INTO Products VALUES 
  (1, 'Hammer', 10, 9.99),
  (2, 'Saw', 5, 11.34),
  (3, 'Wrench', 7, 37.00),
  (4, 'Chisel', 9, 23.00),
  (5, 'Bandage', 70, 120.00);

SELECT * FROM Products;

परिणाम:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      10     9.99    99.9      
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

अगर हम पहली पंक्ति को देखें, तो हम देख सकते हैं कि 9.99 प्रत्येक की कीमत पर 10 हथौड़े हैं। उत्पन्न कॉलम इन दो मानों को एक साथ गुणा करता है और हम 99.9 के साथ समाप्त होते हैं।

यदि हम हथौड़ों की संख्या कम कर देते हैं, तो उत्पन्न स्तंभ एक भिन्न मान उत्पन्न करेगा।

यहाँ एक उदाहरण है।

UPDATE Products 
SET Qty = 5 WHERE Id = 1;

SELECT * FROM Products;

परिणाम:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      5      9.99    49.95     
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

इस मामले में मैंने हथौड़ों की संख्या घटाकर 5 कर दी, और इसलिए उत्पन्न कॉलम ने 49.95 के मान की गणना की।

जेनरेट किए गए कॉलम के प्रकार

जेनरेट किए गए कॉलम दो प्रकार के होते हैं; संग्रहीत और आभासी।

कुछ डीबीएमएस थोड़ी अलग शब्दावली का उपयोग कर सकते हैं, उदाहरण के लिए SQL सर्वर "संग्रहीत" के बजाय "लगातार" शब्द का उपयोग करता है। किसी भी तरह से, यह एक ही चीज़ को संदर्भित करता है।

  • VIRTUAL :स्तंभ मान संग्रहीत नहीं होते हैं, लेकिन पंक्तियों को पढ़ने पर उनका मूल्यांकन किया जाता है।
  • STORED :पंक्तियों को डालने या अपडेट करने पर कॉलम मानों का मूल्यांकन और संग्रह किया जाता है।

STORED इसलिए कॉलम को संग्रहण स्थान की आवश्यकता होती है, जबकि VIRTUAL कॉलम नहीं है।

हालांकि, इसका मतलब यह भी है कि VIRTUAL कॉलम पढ़ते समय अधिक CPU चक्रों का उपयोग करते हैं।

जेनरेट किए गए कॉलम के फ़ायदे

जेनरेट किए गए कॉलम क्वेरी लिखते समय समय बचा सकते हैं, त्रुटियों को कम कर सकते हैं और प्रदर्शन में सुधार कर सकते हैं।

जेनरेट किए गए कॉलम प्रश्नों को सरल और एकीकृत करने के तरीके के रूप में उपयोग किए जा सकते हैं। एक जटिल स्थिति को जेनरेट किए गए कॉलम के रूप में परिभाषित किया जा सकता है और फिर टेबल पर एकाधिक प्रश्नों से संदर्भित किया जा सकता है। इससे यह सुनिश्चित करने में मदद मिलती है कि वे सभी एक ही स्थिति का उपयोग करते हैं।

संग्रहीत जेनरेट किए गए कॉलम जटिल परिस्थितियों के लिए भौतिक रूप से कैश के रूप में उपयोग किए जा सकते हैं जिन्हें फ्लाई पर गणना करना महंगा है।

जेनरेट किए गए कॉलम की सीमाएं

सामान्य कॉलम की तुलना में जेनरेट किए गए कॉलम आम तौर पर सीमाओं के साथ आते हैं, हालांकि सीमाओं की सीमा डीबीएमएस द्वारा निर्धारित की जा सकती है।

उदाहरण के लिए, जेनरेट किए गए कॉलम आम तौर पर केवल उसी पंक्ति के कॉलम से मानों की गणना करने में सक्षम होते हैं। हालांकि, गणना किए गए कॉलम की अभिव्यक्ति के हिस्से के रूप में उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन का उपयोग करके इस सीमा को (कम से कम SQL सर्वर में) दूर किया जा सकता है।

विभिन्न डीबीएमएस में जेनरेट किए गए कॉलम के कार्यान्वयन के बारे में अधिक पढ़ने के लिए नीचे दिए गए लिंक देखें।

आधिकारिक दस्तावेज़ीकरण

यहां कुछ लोकप्रिय डीबीएमएस के लिए प्रलेखन है जिसमें जेनरेट किए गए कॉलम के कार्यान्वयन की सीमाएं शामिल हैं:

  • एसक्यूएल सर्वर में परिकलित कॉलम
  • पोस्टग्रेएसक्यूएल (संस्करण 12) में जेनरेट किए गए कॉलम
  • MySQL (संस्करण 8.0) में जेनरेट किए गए कॉलम
  • SQLite में जेनरेट किए गए कॉलम


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite क्या है

  2. SQLiteOpenHelper का उपयोग करते समय SQLCipher को कैसे कार्यान्वित करें

  3. java.lang.IllegalStateException:CursorWindow से पंक्ति 0, col -1 नहीं पढ़ सका - Android sqlite समस्या

  4. SQLite तालिका बाधा अद्वितीय और ऑन कॉन्फ्लिक्ट रिप्लेस उपयोग

  5. SQLite दिनांक और समय