जेनरेटेड कॉलम सपोर्ट को SQLite में वर्जन 3.31.0 में जोड़ा गया था, जिसे 22 जनवरी 2020 को रिलीज किया गया था।
जेनरेट किए गए कॉलम और कंप्यूटेड कॉलम एक ही चीज हैं। वे स्तंभ हैं जिनके मान एक ही पंक्ति में अन्य स्तंभों के कार्य हैं।
SQLite में, जेनरेट किए गए कॉलम GENERATED ALWAYS
. का उपयोग करके बनाए जाते हैं तालिका बनाते या बदलते समय स्तंभ-बाधा।
उत्पन्न स्तंभ दो प्रकार के होते हैं; STORED
और VIRTUAL
. केवल VIRTUAL
तालिका में परिवर्तन करते समय कॉलम जोड़े जा सकते हैं। तालिका बनाते समय दोनों प्रकारों को जोड़ा जा सकता है।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
CREATE TABLE Products(
Id INTEGER PRIMARY KEY,
Name TEXT,
Qty INT,
Price INT,
TotalValue INT GENERATED ALWAYS AS (Qty * Price)
);
यदि आपको निम्न त्रुटि मिलती है:
Error: near "AS": syntax error
संभावना है, आपको SQLite के बाद के संस्करण में अपग्रेड करने की आवश्यकता है। जेनरेट किए गए कॉलम केवल SQLite 3.31.0 में पेश किए गए थे।
अब डेटा डालें और उसे चुनें।
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
यह एक सरल उदाहरण है और आप निश्चित रूप से अधिक जटिल अभिव्यक्तियों का उपयोग कर सकते हैं, उदाहरण के लिए, वे जो अंतर्निहित कार्यों का उपयोग करते हैं।
वर्चुअल बनाम संग्रहित
डिफ़ॉल्ट रूप से, परिकलित कॉलम VIRTUAL
. के रूप में बनाया जाता है कॉलम।
आपके पास STORED
. बनाने का विकल्प भी है कॉलम।
एक VIRTUAL
. का मान पढ़ते समय कॉलम की गणना की जाती है, जबकि STORED
. का मान पंक्ति लिखे जाने पर कॉलम की गणना की जाती है।
आप स्पष्ट रूप से VIRTUAL
. का उपयोग कर सकते हैं या STORED
आपकी कॉलम परिभाषा में यह इंगित करने के लिए कि यह कौन सा होना चाहिए। यदि आप इसे छोड़ देते हैं, तो यह VIRTUAL
होगा ।
यहां बताया गया है कि हम STORED
. का उपयोग करने के लिए पिछले उदाहरण को कैसे बदल सकते हैं कॉलम।
CREATE TABLE Products(
Id INTEGER PRIMARY KEY,
Name TEXT,
Qty INT,
Price INT,
TotalValue INT GENERATED ALWAYS AS (Qty * Price) STORED
);
भले ही वह STORED
हो कॉलम या VIRTUAL
, डेटा दर्ज करना और चुनना बिल्कुल समान है।
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
जेनरेट किए गए कॉलम में डेटा अपडेट करना
आप सीधे परिकलित कॉलम में डेटा अपडेट नहीं कर सकते। यानी आप सीधे परिकलित कॉलम पर ही नहीं लिख सकते।
इसके डेटा को अपडेट करने के लिए, आपको अंतर्निहित कॉलम में डेटा को अपडेट करना होगा जो कि परिकलित कॉलम के एक्सप्रेशन में उपयोग किया जाता है।
पिछले उदाहरणों में उपयोग किए गए डेटा को अपडेट करने का एक उदाहरण यहां दिया गया है।
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 कर दिया। इसने बदले में स्टॉक में हथौड़ों के कुल मूल्य और उत्पन्न कॉलम में मूल्य (TotalValue) को कम कर दिया। ) 99.99 से घटाकर 49.95 कर दिया गया।