Creating sequence

एक sequence एक database object है जो हर बार पूछने पर एक नया number देता है, तो bill numbers और IDs अपने-आप 1, 2, 3 बढ़ते हैं बिना आपके पिछले वाले पर नज़र रखे, कोई gaps की चिंता नहीं, कोई duplicates नहीं।

9 min read · 9 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

पिछला bill number क्या था?

Meera जो हर bill छापती है उसे एक unique number चाहिए: 1, 2, 3... कागज़ पर वह पिछला पर्चा देखती है और एक जोड़ती है। पर अब उसका चचेरा भाई भी एक दूसरे counter से bills छापता है, और दो बार उन्होंने दोनों ने number 48 पकड़ लिया, दो अलग sales, वही bill number। audit के वक़्त अफ़रा-तफ़री।

'आख़िरी इस्तेमाल किया number' पर हाथ से नज़र रखना उसी पल टूटता है जब एक से ज़्यादा व्यक्ति एक साथ insert करें। Databases इसे एक sequence से हल करते हैं: एक object जिसका इकलौता काम है अगला number देना, सुरक्षित रूप से, जो भी पूछे। कभी कोई duplicate नहीं।

Theory

बैंक में token dispenser

एक व्यस्त बैंक ग्राहकों से 'कौन आख़िरी था' याद रखने को नहीं कहता। एक token मशीन 41, 42, 43... एक प्रति दबाव देती है, जो भी अगला दबाए उसे। दो लोग लगभग एक ही पल दबाते हैं? उन्हें फिर भी अलग tokens मिलते हैं, मशीन कभी वही number दो बार नहीं देती। एक sequence database numbers के लिए वही token dispenser है: दबाइए (पूछिए), अगली unique value पाइए, गारंटीशुदा।

Practical

A sequence for bill numbers

-- Create the dispenser (Oracle syntax)
CREATE SEQUENCE bill_seq
    START WITH 1
    INCREMENT BY 1;

-- Ask for the next number each time you insert a bill
INSERT INTO bills (bill_no, item)
VALUES (bill_seq.NEXTVAL, 'Sugar');   -- gets 1

INSERT INTO bills (bill_no, item)
VALUES (bill_seq.NEXTVAL, 'Tea');     -- gets 2

-- MySQL does the same with AUTO_INCREMENT on the column:
-- bill_no INT AUTO_INCREMENT PRIMARY KEY

Copy करके Oracle FreeSQL खोलें
Oracle FreeSQL, Oracle SQL का मुफ़्त online editor है। Code पहले copy हो जाता है: उसे वहां paste करके Run करें।

Theory

यह कैसे काम करता है

CREATE SEQUENCE dispenser बनाता है; NEXTVAL अगला number माँगता है (और dispenser को आगे बढ़ाता है); CURRVAL मौजूदा वाले पर झाँकता है।

Options इसे tune करते हैं: START WITH (पहला number), INCREMENT BY (कदम, आम तौर पर 1), MAXVALUE, और CYCLE (max के बाद फिर शुरू)।

ज़्यादातर databases primary key IDs अपने-आप भरने को sequences इस्तेमाल करते हैं, तो आप उन्हें कभी हाथ से नहीं गढ़ते। MySQL वही idea एक column keyword में लपेटता है: AUTO_INCREMENT। अलग syntax, एक-सा मक़सद: unique, अपने-आप बढ़ते numbers।

Quiz

जब दो counters एक ही समय पर bills insert करते हैं, तो Meera के हाथ से 'आख़िरी bill number' पर नज़र रखने से एक sequence बेहतर क्यों है?

  1. एक sequence गारंटी देता है कि हर request को एक unique number मिले, एक साथ inserts के बावजूद
  2. एक sequence bills तेज़ी से छापता है
  3. हाथ से numbering कम storage इस्तेमाल करती है
  4. एक sequence दो bills को सुरक्षित रूप से एक number साझा करने देता है
Show the answer

एक sequence गारंटी देता है कि हर request को एक unique number मिले, एक साथ inserts के बावजूद

समस्या concurrency थी: दो users एक साथ 'अगला number' पकड़ते हुए दोनों वही आख़िरी value पढ़ते हैं और वही अगला चुनते हैं, एक duplicate। एक sequence DBMS द्वारा प्रबंधित होता है ताकि एक साथ पहुँच के बावजूद भी per request एक unique number दे, token-dispenser गारंटी। यह concurrency-सुरक्षा ठीक वजह है कि databases हाथ की numbering को हराते हैं (DBMS का concurrency काम याद कीजिए)।

Think first

क्या एक sequence numbers छोड़ता है?

Meera देखती है कि उसके bill numbers 47 से 49 पर कूद गए, number 48 गायब है। उसे एक bug का डर है। एक sequence में एक gap क्या असल में एक समस्या है? सोचिए कि NEXTVAL क्या गारंटी देता है।

Show the answer

नहीं, gaps सामान्य और हानिरहित हैं। एक sequence uniqueness और वृद्धि की गारंटी देता है, एक अटूट क्रम की नहीं। एक number NEXTVAL से 'इस्तेमाल' होकर फिर छोड़ा जा सकता है (एक रद्द sale, एक rolled-back insert), एक gap छोड़ते हुए। एक primary key या bill number के लिए जो मायने रखता है वह यह कि numbers unique हों, कभी यह नहीं कि वे लगातार हों। पूरी तरह gap-रहित sequences की उम्मीद एक आम ग़लतफ़हमी है।

Watch out

Marks कहाँ कटते हैं

यह सोचना कि एक sequence कोई gaps नहीं की गारंटी देता है, यह uniqueness की गारंटी देता है, लगातारपन की नहीं (rollbacks gaps छोड़ते हैं)। NEXTVAL (आगे बढ़ाता और अगला लौटाता है) को CURRVAL (बस झाँकता है) से गड्डमड्ड करना। और MySQL समकक्ष न जानना, एक column पर AUTO_INCREMENT। exam-योग्य बिंदु है क्यों sequences मौजूद हैं: स्वचालित, unique, concurrency-सुरक्षित numbering जो हाथ की tracking नहीं दे सकती।

Theory

आप sequences से घिरे हैं

Amazon पर हर order ID, IRCTC पर हर ticket number, Gri-Learn database में हर row ID, एक sequence (या AUTO_INCREMENT) ने इसे बनाया। यह अदृश्य plumbing है जिसे आप अब समझते हैं। पूरा subject पूरा करने को एक lesson बचता है: views, सहेजी हुई queries जो virtual tables की तरह बर्ताव करती हैं। आगे, और आख़िरी: views बनाना और वे असली tables से कैसे अलग हैं।

Summary

Key takeaways

  • एक sequence एक database object है जो unique, बढ़ते numbers अपने-आप बनाता है।
  • primary keys और bill/invoice numbers के लिए इस्तेमाल होता है ताकि आप कभी आख़िरी वाले पर हाथ से नज़र न रखें।
  • CREATE SEQUENCE इसे बनाता है; NEXTVAL अगली value देता है; CURRVAL मौजूदा पर झाँकता है।
  • यह concurrency-सुरक्षित है: कई users एक साथ insert करें तब भी कोई duplicate numbers नहीं।
  • Gaps हो सकते हैं (rollbacks से) और हानिरहित हैं; यह uniqueness की गारंटी देता है, लगातारपन की नहीं। MySQL AUTO_INCREMENT इस्तेमाल करता है।
  • याद रखने का hook: एक बैंक token dispenser, अगले unique number के लिए दबाइए।

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Concepts of SQL and Queries (Single Table only)

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Creating sequence · Data Processing and Analysis (DPA) · Gri-Learn