यदि फ़ील्ड आपकी प्राथमिक कुंजी है...
... फिर, जैसा कि इस प्रश्न पर कहीं और कहा गया है, आपको आईडी नहीं बदलनी चाहिए। आईडी पहले से ही अद्वितीय हैं और आपको न तो उनकी आवश्यकता है और न ही उनका पुन:उपयोग करना चाहते हैं।
अब, उसने कहा...
अन्यथा...
यह बहुत संभव है कि आपके पास भिन्न हो कुछ एप्लिकेशन-डिफ़ाइंड ऑर्डरिंग के लिए फ़ील्ड (अर्थात, साथ ही पीके)। जब तक यह आदेश किसी अन्य क्षेत्र में निहित नहीं है (उदाहरण के लिए यदि यह उपयोगकर्ता द्वारा परिभाषित है), तो इसमें कुछ भी गलत नहीं है।
आप एक (अस्थायी) auto_increment
. का उपयोग करके तालिका को फिर से बना सकते हैं फ़ील्ड करें और फिर auto_increment
को हटा दें बाद में।
मैं UPDATE
के लिए ललचाऊंगा आरोही क्रम में और एक वृद्धिशील चर लागू करें।
SET @i = 0;
UPDATE `table`
SET `myOrderCol` = @i:[email protected]+1
ORDER BY `myOrderCol` ASC;
ऐसा हर बार करना काफी बेकार लगता है आप आइटम हटाते हैं, लेकिन दुर्भाग्य से इस मैनुअल ऑर्डरिंग दृष्टिकोण के साथ आप इसके बारे में बहुत कुछ नहीं कर सकते हैं यदि आप कॉलम की अखंडता को बनाए रखना चाहते हैं।
आप संभवतः लोड को कम कर सकते हैं, जैसे कि myOrderCol
. के साथ प्रविष्टि को हटाने के बाद 5
. के बराबर :
SET @i = 5;
UPDATE `table`
SET `myOrderCol` = @i:[email protected]+1
WHERE `myOrderCol` > 5
ORDER BY `myOrderCol` ASC;
यह निम्नलिखित सभी मानों को एक-एक करके "शफ़ल" कर देगा।