Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL:आईडी को ऑटो-इन्क्रीमेंट करते समय मेरा INSERT स्टेटमेंट 56 नंबरों को क्यों छोड़ देता है?

इस व्यवहार का "बल्क इंसर्ट" और innodb_autoinc_lock_mode सेटिंग।

जहाँ तक मैं इसे समझता हूँ (दस्तावेज़ीकरण इस बारे में बिल्कुल स्पष्ट नहीं है), जब आप INSERT INTO ... SELECT का उपयोग करते हैं कथन, MySQL यह नहीं जान सकता कि क्वेरी चलाने से पहले वास्तव में कितनी पंक्तियाँ डाली जा रही हैं, लेकिन innodb_autoinc_lock_mode=1 का उपयोग करते समय नए AUTO_INCREMENT मानों के लिए आईडी आरक्षित करनी होंगी (लगातार) या 2 (इंटरलीव्ड)। मेरे अवलोकन से यह AUTO_INCREMENT संख्याओं का एक सेट सुरक्षित रखता है जहाँ गिनती 2 की शक्ति है (इसकी पुष्टि नहीं कर सकता, केवल एक अनुमान)। निम्नलिखित उदाहरण देखें:

CREATE TABLE sourceTable(
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20)
);

CREATE TABLE targetTable(
    id INT AUTO_INCREMENT PRIMARY KEY,
    original VARCHAR(30)
);

INSERT INTO sourceTable(name) VALUES ('one');
INSERT INTO sourceTable(name) VALUES ('two');
INSERT INTO sourceTable(name) VALUES ('three');
INSERT INTO sourceTable(name) VALUES ('four');
INSERT INTO sourceTable(name) VALUES ('five');

INSERT INTO targetTable(original) SELECT name FROM sourceTable;

INSERT INTO targetTable(original) VALUES ('manual');

SELECT * FROM targetTable;

यह निम्नलिखित आउटपुट उत्पन्न करेगा:

+----+----------+
| id | original |
+----+----------+
|  1 | one      |
|  2 | two      |
|  3 | three    |
|  4 | four     |
|  5 | five     |
|  8 | manual   |
+----+----------+

स्रोत तालिका से 5 पंक्तियों को सम्मिलित करते समय, यह अगले 8 संभावित AUTO_INCREMENT मानों को सुरक्षित रखता है क्योंकि यह 5 से अधिक 2 संख्याओं की निकटतम घात है। हालाँकि, यह उनमें से केवल 5 का उपयोग करेगा क्योंकि आप केवल 5 पंक्तियाँ सम्मिलित करते हैं।

आपके मामले में, आप 200 पंक्तियाँ सम्मिलित कर रहे हैं, इसलिए 200 से बड़ी 2 संख्याओं की निकटतम घात 256 होगी। इसलिए आपके पास 56 अनुपलब्ध AUTO_INCREMENT मानों का "अंतर" है और अगली प्रविष्टि को ID 256 प्राप्त होती है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैसकल डाटा बेस में हर महीने एक कॉलम में मूल्य जोड़ें

  2. एक्सेल की नई शीट पर डेटा कैसे लिखें

  3. innobackupex का उपयोग करके दूरस्थ रूप से बैकअप लेना

  4. एक MySQL क्वेरी में लगातार यादृच्छिक क्रम

  5. MySQL डेटाबेस में डेटा डालें