में ऑटोमेशन के लिए प्रारंभ मूल्य सेट करें मैं SQLite में एक ऑटोमेशन क्षेत्र के लिए प्रारंभ मूल्य कैसे सेट कर सकता हूं?SQLite
SQLite
उत्तर
तालिका में value-1
स्पष्ट रूप से डालें, फिर पंक्ति हटाएं।
संपादित करें: नीचे अगली टिप्पणी है, जो संपादन सीधे SQLITE_SEQUENCE
मेज पर चर्चा करता है शायद बेहतर है: https://stackoverflow.com/a/692871/10093
एक तरह से करने के लिए यह पहली पंक्ति स्पष्ट पंक्ति आईडी आप साथ शुरू करना चाहते हैं निर्दिष्ट करने सम्मिलित करने के लिए है । SQLite तब पंक्ति आईडी को सम्मिलित करेगा जो पिछले उच्चतम से अधिक है।
:
SQLite सबसे बड़ा ROWID कि एक मेज कभी विशेष
SQLITE_SEQUENCE
तालिका का उपयोग कर कार्य किया है का ट्रैक रखता है।SQLITE_SEQUENCE
तालिका बनाई जाती है और स्वचालित रूप से प्रारंभ होता है जब एक सामान्य तालिका जिसमें एक ऑटोमेशन कॉलम होता है।SQLITE_SEQUENCE
तालिका की सामग्री सामान्य अद्यतन, INSERT, और DELETE कथन का उपयोग करके संशोधित की जा सकती है। लेकिन इस तालिका में संशोधन करने से ऑटोमैनमेंट की मुख्य पीढ़ी एल्गोरिदम प्रभावित हो जाएगी। सुनिश्चित करें कि आप इस तरह के परिवर्तन करने से पहले क्या कर रहे हैं, यह सुनिश्चित करें कि आप क्या कर रहे हैं।
मैं इस की कोशिश की, और यह काम करता है:
UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<table>'
कहाँ n +1 ROWID आप चाहते हैं और तालिका है तालिका नाम है।
निश्चित नहीं है, क्योंकि मुझे यकीन नहीं है कि एसक्लाइट आंतरिक कैसे काम करता है। यह ध्यान देने योग्य है कि जेएल और मेरे सुझाव ऊपर दिए गए हैं कि PHP की एमडीबी 2 लाइब्रेरी आईडी को बदलने का समर्थन करती है। अपने एसक्लाइट ड्राइवर स्रोत पर नज़र डालें: http://cvs.php.net/viewvc.cgi/pear/MDB2/MDB2/Driver/sqlite.php?view=markup –
ईमानदारी मुद्दा नहीं है (मुझे लगता है, नहीं एक विशेषज्ञ या कुछ भी)।समस्या मुझे विश्वास है कि वे इस बारे में चेतावनी दे रहे हैं कि यदि आप MAX से कम आईडी (आईडी) के साथ एक पंक्ति हटाते हैं और इस तरह मैन्युअल रूप से स्वत: वृद्धि को सेट करते हैं और सेट करते हैं। प्राथमिक कुंजी उल्लंघन के कारण आप पहली डाली गई पंक्ति के बाद अटक जाएंगे। – Assimilater
सटीक एल्गोरिदम को लिंक किए गए पृष्ठ पर दस्तावेज किया गया है, और संगतता को संरक्षित रखने के लिए किसी भी 3.x संस्करण में नहीं बदला जाएगा। –
SQLITE_SEQUENCE तालिका के समाधान में, इस तालिका में प्रविष्टि को ऑटोइनक्रिकमेंट कॉलम के साथ तालिका में पहले डालने के बाद जोड़ा जाना प्रतीत होता है। कुछ मामलों में यह परेशानी का कारण बन सकता है (यानी autoincrement अभी भी 1 से शुरू होता है, वांछित मूल्य से नहीं)।
मैं नीचे दी गई क्वेरी का उपयोग कर रहा हूं जो समस्या को हल करता है जब sqlite_sequence के पास तालिका के लिए रिकॉर्ड नहीं है (यानी पहला रिकॉर्ड तालिका में अभी तक जोड़ा नहीं गया था), अन्यथा यह अनुक्रम अद्यतन करता है।
REPLACE INTO sqlite_sequence (name, seq) VALUES ('<table>', <n>)
मेरे लिए यह काम:
BEGIN TRANSACTION;
UPDATE sqlite_sequence SET seq = <n> WHERE name = '<table>';
INSERT INTO sqlite_sequence (name,seq) SELECT '<table>', <n> WHERE NOT EXISTS
(SELECT changes() AS change FROM sqlite_sequence WHERE change <> 0);
COMMIT;
यह एकमात्र बिल्कुल सही समाधान है। परिवर्तन वूडू मेरी आँखें पानी बनाता है, हालांकि;) – w00t
अब मैं अपने समाधान के रूप में यह प्रयोग किया जाता है। उपरोक्त उत्तर के लिए धन्यवाद।
- 1. SQLite अपवाद: SQLite व्यस्त
- 2. SQLite
- 3. SQLite
- 4. SQLite
- 5. SQLite
- 6. SQLite
- 7. SQLite
- 8. SQLite
- 9. SQLite
- 10. SQLite
- 11. SQLite
- 12. SQLite
- 13. SQLite
- 14. sqlite
- 15. SQLite
- 16. SQLite
- 17. SQLite
- 18. SQLite
- 19. SQLite
- 20. SQLite
- 21. sqlite
- 22. sqlite
- 23. SQLite
- 24. SQLite
- 25. SQLite
- 26. SQLite
- 27. SQLite
- 28. SQLite
- 29. SQLite
- 30. SQLite
मुझे लगता है कि यह करने का यह सबसे अच्छा तरीका है, लेकिन यह सुंदर नहीं है। –
यह मेरे लिए काम नहीं करता है। अगर मेरे पास केवल 1 प्रविष्टि (आईडी 1) वाली तालिका "उपयोगकर्ता" है, जबकि ऑटो-वृद्धि 3 पर है, तो दूसरा उपयोगकर्ता आईडी -1 के साथ डाला जाता है, फिर हटा दिया जाता है, अगला डाला गया उपयोगकर्ता अभी भी आईडी 4 है (फ़ायरफ़ॉक्स के लिए SQLite प्रबंधक एक्सटेंशन , अगर यह एक फर्क पड़ता है) – Assimilater
एक कामकाज की तरह लगता है। मैं प्रश्न में तालिका के लिए sqlite_sequence तालिका रिकॉर्ड को संबोधित करना पसंद करता हूं। –