एसएपी हाना - एसक्यूएल अनुक्रम
एक अनुक्रम पूर्णांक 1, 2, 3 का एक सेट है, जो मांग पर क्रम में उत्पन्न होता है। अनुक्रम अक्सर डेटाबेस में उपयोग किए जाते हैं क्योंकि कई अनुप्रयोगों को एक अद्वितीय मूल्य वाले तालिका में प्रत्येक पंक्ति की आवश्यकता होती है, और अनुक्रम उन्हें उत्पन्न करने का एक आसान तरीका प्रदान करते हैं।
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 स्क्रिप्ट पिछले रिकॉर्ड के ऑटो-इन्क्रिमेटेड मूल्य को पुनः प्राप्त करने के लिए विशेष कार्य प्रदान करते हैं।
पर्ल उदाहरण
क्वेरी द्वारा उत्पन्न AUTO_INCREMENT मान प्राप्त करने के लिए mysql_insertid विशेषता का उपयोग करें। यह विशेषता या तो डेटाबेस हैंडल या स्टेटमेंट हैंडल के माध्यम से एक्सेस की जाती है, इस पर निर्भर करता है कि आप क्वेरी कैसे जारी करते हैं। निम्न उदाहरण इसे डेटाबेस हैंडल के माध्यम से संदर्भित करता है -
$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 के साथ प्रारंभिक अनुक्रम मान सेट कर सकते हैं।