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

MySQL में LPAD और INSERT INTO SELECT का उपयोग करके अग्रणी शून्य के साथ मान डालें

MySQL में अग्रणी शून्य के साथ क्रमिक ID उत्पन्न करना

LPAD() फ़ंक्शन और INSERT INTO SELECT का उपयोग करके आप एक कॉलम में अग्रणी शून्य के साथ स्वरूपित मान (जैसे '001', '002', '003') स्वचालित रूप से उत्पन्न और डाल सकते हैं।

टेबल बनाना

mysql> CREATE TABLE DemoTable1967 (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserId VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.00 sec)

LPAD के साथ INSERT INTO SELECT का उपयोग करके डेटा डालना

mysql> INSERT INTO DemoTable1967(UserId) 
    -> SELECT LPAD(COALESCE(MAX(Id), 0) + 1, 3, '0') FROM DemoTable1967;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> INSERT INTO DemoTable1967(UserId) 
    -> SELECT LPAD(COALESCE(MAX(Id), 0) + 1, 3, '0') FROM DemoTable1967;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> INSERT INTO DemoTable1967(UserId) 
    -> SELECT LPAD(COALESCE(MAX(Id), 0) + 1, 3, '0') FROM DemoTable1967;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

परिणाम

mysql> SELECT * FROM DemoTable1967;
+----+--------+
| Id | UserId |
+----+--------+
|  1 | 001    |
|  2 | 002    |
|  3 | 003    |
+----+--------+
3 rows in set (0.00 sec)

फ़ंक्शन विश्लेषण

  • MAX(Id): वर्तमान अधिकतम ID प्राप्त करता है
  • COALESCE(MAX(Id), 0): यदि टेबल खाली है तो 0 लौटाता है (पहली पंक्ति के लिए)
  • + 1: अगला क्रमिक संख्या
  • LPAD(value, 3, '0'): मान को बाईं ओर '0' से पैड करके 3 वर्णों का बनाता है

LPAD सिंटैक्स

LPAD(str, len, padstr)
  • str: पैड करने के लिए स्ट्रिंग
  • len: परिणाम की कुल लंबाई
  • padstr: पैड करने के लिए स्ट्रिंग (दोहराई जाती है)

LPAD उदाहरण

SELECT LPAD(1, 3, '0');      -- '001'
SELECT LPAD(12, 3, '0');     -- '012'
SELECT LPAD(123, 3, '0');    -- '123'
SELECT LPAD(1234, 3, '0');   -- '1234' (काटा नहीं जाता, लंबाई से अधिक)

RPAD (दाएं पैडिंग)

SELECT RPAD(1, 3, '0');      -- '100'
SELECT RPAD('AB', 5, 'x');   -- 'ABxxx'

संभावित समस्याएं और समाधान

1. रेस कंडीशन (समवर्ती इन्सर्ट)

उच्च समवर्ती वातावरण में, दो सत्र समान MAX(Id) पढ़ सकते हैं।

समाधान: लेनदेन या LOCK TABLES का उपयोग करें, या AUTO_INCREMENT पर भरोसा करें और दृश्य/गणना कॉलम में प्रारूपित करें।

2. बेहतर दृष्टिकोण: दृश्य/गणना कॉलम

-- MySQL 5.7+ गणना कॉलम
ALTER TABLE DemoTable1967 
ADD COLUMN FormattedId VARCHAR(10) 
GENERATED ALWAYS AS (LPAD(Id, 3, '0')) STORED;

-- या दृश्य
CREATE VIEW View_DemoTable1967 AS
SELECT Id, LPAD(Id, 3, '0') AS UserId FROM DemoTable1967;

3. ट्रिगर-आधारित दृष्टिकोण

CREATE TRIGGER before_insert_demo
BEFORE INSERT ON DemoTable1967
FOR EACH ROW
SET NEW.UserId = LPAD(NEW.Id, 3, '0');

प्रदर्शन नोट

प्रत्येक INSERT पर SELECT MAX(Id) के लिए टेबल स्कैन की आवश्यकता होती है। बड़े टेबल्स के लिए, एक काउंटर टेबल या अनुक्रम का उपयोग करें (MySQL 8.0+: CREATE SEQUENCE)।

  1. Java का उपयोग करके MySQL टेबल में रिकॉर्ड डालें Java का उपयोग करके MySQL टेबल में रिकॉर्ड डालें

    JDBC Statement या PreparedStatement का उपयोग करके Java एप्लिकेशन से MySQL में रिकॉर्ड डालें। टेबल बनाना CREATE TABLE DemoTable( Id INT, Name VARCHAR(30), CountryName VARCHAR(30), Age INT ); Query OK, 0 rows affected (0.66 sec) Java कोड (Statement) 0) { System.out.

  1. - MySQL में AUTO_INCREMENT टेबल में INSERT INTO SELECT कैसे करें?

    MySQL में AUTO_INCREMENT प्राइमरी की वाली टेबल में INSERT INTO ... SELECT का उपयोग करते समय, आप स्पष्ट रूप से ID मान प्रदान कर सकते हैं या ऑटो-जनरेट होने दे सकते हैं। दोनों दृष्टिकोण वैध हैं लेकिन अलग व्यवहार करते हैं। उदाहरण: स्पष्ट ID के साथ INSERT INTO SELECT ऑटो-इन्क्रीमेंट टेबल बनाएं: mysql&

  1. - MySQL में INSERT INTO SELECT और UNION के साथ एकाधिक इन्सर्ट कैसे करें?

    MySQL में एक ही स्टेटमेंट में एकाधिक पंक्तियाँ इन्सर्ट करने के लिए, INSERT INTO ... SELECT के साथ UNION ALL (या UNION) का उपयोग करें। यह अलग-अलग INSERT स्टेटमेंट से अधिक कुशल है। सिंटैक्स INSERT INTO table_name (col1, col2, col3) SELECT val1, val2, val3 UNION ALL SELECT val4, val5, val6 UNION ALL S