Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में दो कॉलम को प्राइमरी की के साथ ऑटो-इन्क्रीमेंट कैसे बनाएं?


MyISAM इंजन के साथ कम्पोजिट प्राइमरी की में AUTO_INCREMENT

InnoDB कम्पोजिट प्राइमरी की में AUTO_INCREMENT कॉलम को पहले कॉलम के रूप में रखने की आवश्यकता होती है और यह प्रति समूह अनुक्रम नहीं करता। MyISAM इंजन एक अनूठी सुविधा प्रदान करता है: कम्पोजिट प्राइमरी की का दूसरा कॉलम AUTO_INCREMENT हो सकता है और यह पहले कॉलम के मान के आधार पर प्रति समूह अनुक्रमित होता है।

उदाहरण: MyISAM के साथ

1. टेबल बनाएं

mysql> CREATE TABLE TwoPrimaryKeyTableDemo (
    -> Result ENUM('First','Second','Third','Fail') NOT NULL,
    -> StudentId INT NOT NULL AUTO_INCREMENT,
    -> StudentName VARCHAR(200) NOT NULL,
    -> PRIMARY KEY(Result, StudentId)
    -> ) ENGINE=MyISAM;

2. रिकॉर्ड डालें

mysql> INSERT INTO TwoPrimaryKeyTableDemo(StudentName, Result) VALUES('John', 'Fail');
mysql> INSERT INTO TwoPrimaryKeyTableDemo(StudentName, Result) VALUES('Carol', 'First');
mysql> INSERT INTO TwoPrimaryKeyTableDemo(StudentName, Result) VALUES('Smith', 'Third');
mysql> INSERT INTO TwoPrimaryKeyTableDemo(StudentName, Result) VALUES('Johnson', 'Second');
mysql> INSERT INTO TwoPrimaryKeyTableDemo(StudentName, Result) VALUES('Johnson', 'Third');
mysql> INSERT INTO TwoPrimaryKeyTableDemo(StudentName, Result) VALUES('Carol', 'Second');
mysql> INSERT INTO TwoPrimaryKeyTableDemo(StudentName, Result) VALUES('Carol', 'Fail');

3. क्रमबद्ध परिणाम देखें

mysql> SELECT * FROM TwoPrimaryKeyTableDemo ORDER BY StudentId, Result;

आउटपुट:

+--------+-----------+-------------+
| Result | StudentId | StudentName |
+--------+-----------+-------------+
| First  | 1         | Carol       |
| Second | 1         | Johnson     |
| Third  | 1         | Smith       |
| Fail   | 1         | John        |
| Second | 2         | Carol       |
| Third  | 2         | Johnson     |
| Fail   | 2         | Carol       |
+--------+-----------+-------------+

व्यवहार व्याख्या

  • प्रत्येक Result मान (प्राइमरी की का पहला कॉलम) के लिए, StudentId 1 से शुरू होता है और स्वतंत्र रूप से बढ़ता है।
  • यह केवल MyISAM के साथ काम करता है। InnoDB इसका समर्थन नहीं करता।
  • AUTO_INCREMENT कॉलम प्राइमरी की का अंतिम कॉलम होना चाहिए।

InnoDB विकल्प

InnoDB में, आप इस व्यवहार को अनुकरण कर सकते हैं:

  • एक अलग अनुक्रम टेबल का उपयोग करके
  • एप्लिकेशन लेयर पर अनुक्रम प्रबंधन करके
  • विंडो फ़ंक्शन (MySQL 8.0+) के साथ ROW_NUMBER() OVER (PARTITION BY Result ORDER BY ...) का उपयोग करके

चेतावनी

MyISAM ट्रांजैक्शन, विदेशी कुंजी, और पंक्ति-स्तरीय लॉकिंग का समर्थन नहीं करता। अधिकांश आधुनिक एप्लिकेशन के लिए InnoDB पसंदीदा इंजन है।

  1. - MySQL में एक क्वेरी से दो कॉलम कैसे अपडेट करें?

    MySQL में एक ही UPDATE स्टेटमेंट में एकाधिक कॉलम अपडेट करने के लिए, SET क्लॉज़ में कॉलम को कॉमा से अलग करके सूचीबद्ध करें। यह एटॉमिक ऑपरेशन सुनिश्चित करता है और क्वेरी ओवरहेड कम करता है। उदाहरण: FirstName और LastName एक साथ अपडेट करना डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1909 ( Id

  1. - MySQL में प्राइमरी की कैसे रीसेट करें?

    MySQL में ऑटो-इन्क्रीमेंट प्राइमरी की को रीसेट (1 से शुरू) करने के लिए, TRUNCATE TABLE का उपयोग करें जो डेटा हटाता है और ऑटो-इन्क्रीमेंट काउंटर रीसेट करता है, या ALTER TABLE से मैन्युअली सेट करें। विधि 1: TRUNCATE TABLE (सबसे सरल, डेटा हटाता है) टेबल बनाएं: mysql> CREATE TABLE DemoTable1929 (

  1. - MySQL में AUTO_INCREMENT कॉलम के साथ काम करना

    आइए समझते हैं कि MySQL में AUTO_INCREMENT कॉलम के साथ कैसे काम करें: AUTO_INCREMENT विशेषता का उपयोग नई रो के लिए एक अद्वितीय पहचानकर्ता उत्पन्न करने के लिए किया जाता है। आइए देखें कि यह स्टेटमेंट कैसे काम करता है। उससे पहले, नीचे दी गई क्वेरी पर विचार करें: क्वेरी CREATE TABLE tableName ( id