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

MySQL में एक पंक्ति हटाकर शेष को सही ID के साथ पुनर्क्रमित करना

समाधान: DELETE के बाद सशर्त UPDATE

एक पंक्ति हटाने के बाद, अधिक ID वाली पंक्तियों को डिक्रीमेंट करके क्रम को बनाए रखें।

व्यावहारिक उदाहरण

टेबल बनाना और डेटा डालना

mysql> CREATE TABLE ReorderSortDemo (UserId INT);

mysql> INSERT INTO ReorderSortDemo VALUES
    -> (14), (4), (6), (3), (8), (18), (1), (11), (16);

मूल डेटा (9 पंक्तियाँ, क्रमबद्ध नहीं)

UserId
14
4
6
3
8
18
1
11
16

चरण 1: UserId=8 वाली पंक्ति हटाना

mysql> DELETE FROM ReorderSortDemo WHERE UserId = 8;
Query OK, 1 row affected

चरण 2: 8 से बड़ी सभी ID को 1 से घटाना

mysql> UPDATE ReorderSortDemo 
    -> SET UserId = UserId - 1 
    -> WHERE UserId > 8;
Query OK, 4 rows affected

अंतिम परिणाम

UserId (पहले)UserId (बाद में)परिवर्तन
1413-1
44कोई नहीं
66कोई नहीं
33कोई नहीं
8हटाया गया-
1817-1
11कोई नहीं
1110-1
1615-1

⚠️ महत्वपूर्ण चेतावनी

प्राथमिक कुंजी मान बदलना खतरनाक है!
  • विदेशी कुंजी संबंध टूट जाएंगे
  • एप्लिकेशन लॉजिक प्रभावित हो सकता है
  • ऑडिट ट्रेल/इतिहास अमान्य हो जाता है
  • समवर्ती पहुंच के साथ रेस कंडीशन

बेहतर विकल्प

  • सॉफ्ट डिलीट: deleted_at टाइमस्टैम्प कॉलम जोड़ें
  • गैप स्वीकार करें: ऑटो-इंक्रीमेंट गैप सामान्य और हानिरहित हैं
  • अलग क्रम कॉलम: sort_order कॉलम का उपयोग करें जिसे सुरक्षित रूप से अद्यतन किया जा सके
  • विंडो फ़ंक्शन (MySQL 8.0+): ROW_NUMBER() OVER (ORDER BY UserId) रनटाइम पर क्रमांक के लिए

यदि आवश्यक हो तो पूरी तरह से पुनर्क्रमित करना (1 से शुरू)

SET @rownum = 0;
UPDATE ReorderSortDemo 
SET UserId = (@rownum := @rownum + 1)
ORDER BY UserId;

लेकिन फिर भी: प्राथमिक कुंजी न बदलें!

  1. - MySQL में SUBSTRING_INDEX() से स्ट्रिंग विभाजित करके अंतिम शब्द प्राप्त करें

    MySQL में किसी स्ट्रिंग को विभाजित करके अंतिम शब्द निकालने के लिए SUBSTRING_INDEX() फ़ंक्शन का उपयोग करें। यह फ़ंक्शन एक डिलीमीटर के आधार पर स्ट्रिंग को भागों में बांटता है और निर्दिष्ट घटना से पहले या बाद का भाग लौटाता है। सिंटैक्स SUBSTRING_INDEX(str, delim, count) str - स्रोत स्ट्रिंग delim - ड

  1. - MySQL में एक वैल्यू को CAST करके दूसरे से डिवीजन कैसे करें?

    CAST() से इंटीजर डिवीजन को डेसीमल डिवीजन में बदलना MySQL में दो इंटीजर कॉलम का डिवीजन करने पर इंटीजर डिवीजन होता है (ट्रंकेटेड)। सटीक डेसीमल परिणाम के लिए एक ऑपरेंड को CAST() से DECIMAL में बदलें। टेबल बनाना और डेटा इन्सर्ट करना CREATE TABLE DemoTable1352 ( Value1 INT, Value2 INT ); INSERT

  1. - MySQL में डुप्लिकेट डिलीट करके एक पंक्ति कैसे रखें?

    टेम्पररी टेबल विधि CREATE TABLE temp AS SELECT DISTINCT ... से यूनिक रिकॉर्ड कॉपी करें। मूल टेबल TRUNCATE करें। टेम्पररी टेबल से डेटा वापस डालें। टेम्पररी टेबल DROP करें। उदाहरण insert into demo39 values(10,John), (10,John), (11,David), (11,David); डुप्लिकेट हटाने के चरण drop table temporaryT