MySQL 5.7+ में GENERATED ALWAYS AS (जेनरेटेड कॉलम / वर्चुअल कॉलम) का उपयोग करके नया कॉलम बनाएं जो अन्य कॉलम के अभिव्यक्ति से स्वचालित रूप से परिकलित होता है।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable (
-> Value1 INT,
-> Value2 INT
-> );
Query OK, 0 rows affected (0.77 sec)
mysql> INSERT INTO DemoTable VALUES(10, 10), (20, 30);
मौजूदा डेटा देखना
mysql> SELECT * FROM DemoTable;
आउटपुट
+--------+--------+ | Value1 | Value2 | +--------+--------+ | 10 | 10 | | 20 | 30 | +--------+--------+ 2 rows in set (0.00 sec)
जेनरेटेड कॉलम जोड़ना (बूलियन तुलना: समान तो 1, अलग तो 0)
mysql> ALTER TABLE DemoTable ADD Value3 INT GENERATED ALWAYS AS (Value1 = Value2); Query OK, 0 rows affected (0.51 sec) Records: 0 Duplicates: 0 Warnings: 0
नोट: MySQL में बूलियन अभिव्यक्ति का परिणाम पूर्णांक संदर्भ में 1 (TRUE) या 0 (FALSE) होता है।
अपडेट के बाद डेटा देखना
mysql> SELECT * FROM DemoTable;
आउटपुट
+--------+--------+--------+ | Value1 | Value2 | Value3 | +--------+--------+--------+ | 10 | 10 | 1 | -- समान | 20 | 30 | 0 | -- अलग +--------+--------+--------+ 2 rows in set (0.00 sec)
जेनरेटेड कॉलम के प्रकार:
VIRTUAL(डिफ़ॉल्ट) - पढ़ने पर परिकलित, स्टोर नहीं होता, कोई डिस्क स्पेस नहींSTORED- लिखने पर परिकलित, डिस्क पर स्टोर होता है, इंडेक्स बनाया जा सकता है
स्पष्ट VIRTUAL/STORED:
ALTER TABLE DemoTable ADD Value3 INT GENERATED ALWAYS AS (Value1 = Value2) VIRTUAL; ALTER TABLE DemoTable ADD Value4 INT GENERATED ALWAYS AS (Value1 + Value2) STORED;
लाभ: डेटा अतिरेक नहीं, हमेशा सिंक में, एप्लिकेशन लॉजिक सरल।