एसक्यूएल - अनुक्रम का उपयोग करना

एक अनुक्रम पूर्णांक 1, 2, 3, का एक सेट है ... जो मांग पर क्रम में उत्पन्न होता है। अनुक्रम अक्सर डेटाबेस में उपयोग किए जाते हैं क्योंकि कई अनुप्रयोगों को एक अद्वितीय मूल्य वाले तालिका में प्रत्येक पंक्ति की आवश्यकता होती है और अनुक्रम उन्हें उत्पन्न करने का एक आसान तरीका प्रदान करते हैं।

यह अध्याय बताता है कि MySQL में दृश्यों का उपयोग कैसे किया जाता है।

AUTO_INCREMENT कॉलम का उपयोग करना

अनुक्रम का उपयोग करने के लिए MySQL का सबसे सरल तरीका AUTO_INCREMENT के रूप में एक कॉलम को परिभाषित करना है और देखभाल करने के लिए बाकी को MySQL पर छोड़ना है।

उदाहरण

निम्नलिखित उदाहरण देखें। यह एक तालिका बनाएगा और उसके बाद यह इस तालिका में कुछ पंक्तियाँ डालेगा जहाँ रिकॉर्ड आईडी देने की आवश्यकता नहीं है क्योंकि MySQL द्वारा इसका ऑटो-इंक्रीमेंट किया गया है।

mysql> CREATE TABLE INSECT
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO INSECT (id,name,date,origin) VALUES
   -> (NULL,'housefly','2001-09-10','kitchen'),
   -> (NULL,'millipede','2001-09-10','driveway'),
   -> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM INSECT ORDER BY id;
+----+-------------+------------+------------+
| id | name        | date       | origin     |
+----+-------------+------------+------------+
|  1 | housefly    | 2001-09-10 | kitchen    |
|  2 | millipede   | 2001-09-10 | driveway   |
|  3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

AUTO_INCREMENT मान प्राप्त करें

LAST_INSERT_ID () एक SQL फ़ंक्शन है, इसलिए आप इसे किसी भी क्लाइंट के भीतर से उपयोग कर सकते हैं जो समझता है कि SQL स्टेटमेंट कैसे जारी किया जाए। अन्यथा PERL और PHP स्क्रिप्ट पिछले रिकॉर्ड के ऑटो-इन्क्रिमेटेड मूल्य को पुनः प्राप्त करने के लिए विशेष कार्य प्रदान करते हैं।

पर्ल उदाहरण

उपयोग mysql_insertidक्वेरी द्वारा उत्पन्न AUTO_INCREMENT मान प्राप्त करने की विशेषता। यह विशेषता या तो डेटाबेस हैंडल या स्टेटमेंट हैंडल के माध्यम से एक्सेस की जाती है, इस पर निर्भर करता है कि आप क्वेरी कैसे जारी करते हैं। निम्न उदाहरण इसे डेटाबेस हैंडल के माध्यम से संदर्भित करता है।

$dbh->do ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};

PHP उदाहरण

AUTO_INCREMENT मान उत्पन्न करने वाली क्वेरी जारी करने के बाद, कॉल करके मान पुनः प्राप्त करें mysql_insert_id( ) समारोह।

mysql_query ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);

एक मौजूदा अनुक्रम का नवीनीकरण

ऐसा कोई मामला हो सकता है जब आपने किसी तालिका से कई रिकॉर्ड हटा दिए हों और आप सभी रिकॉर्डों को फिर से अनुक्रमित करना चाहते हों। यह एक सरल चाल का उपयोग करके किया जा सकता है, लेकिन आपको यह करने के लिए बहुत सावधान रहना चाहिए और जांचना चाहिए कि आपकी तालिका किसी अन्य तालिका के साथ शामिल हो रही है या नहीं।

यदि आप यह निर्धारित करते हैं कि AUTO_INCREMENT कॉलम का आकार बदलना अपरिहार्य है, तो ऐसा करने का तरीका स्तंभ को तालिका से गिराना है, फिर इसे फिर से जोड़ें।

निम्नलिखित उदाहरण से पता चलता है कि इस तकनीक का उपयोग करके कीट तालिका में आईडी मूल्यों को कैसे फिर से भरना है।

mysql> ALTER TABLE INSECT DROP id;
mysql> ALTER TABLE insect
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

एक विशेष मूल्य पर अनुक्रम शुरू करना

डिफ़ॉल्ट रूप से, MySQL 1 से अनुक्रम शुरू करेगा, लेकिन आप तालिका निर्माण के समय किसी अन्य संख्या को भी निर्दिष्ट कर सकते हैं।

निम्न कोड ब्लॉक का एक उदाहरण है जहां MySQL 100 से अनुक्रम शुरू करेगा।

mysql> CREATE TABLE INSECT
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);

वैकल्पिक रूप से, आप तालिका बना सकते हैं और फिर ALTER TABLE के साथ प्रारंभिक अनुक्रम मान सेट कर सकते हैं।

mysql> ALTER TABLE t AUTO_INCREMENT = 100;