2009-10-21 16 views
87

मेरे पास SQLite में कुछ तालिकाओं हैं और मैं यह समझने की कोशिश कर रहा हूं कि स्वतः-वृद्धि वाले डेटाबेस फ़ील्ड को रीसेट कैसे करें।SQLite रीसेट प्राथमिक कुंजी फ़ील्ड

मैंने पढ़ा है कि DELETE FROM tablename सबकुछ हटा देना चाहिए और ऑटो-incremement फ़ील्ड को 0 पर रीसेट करना चाहिए, लेकिन जब मैं ऐसा करता हूं तो यह डेटा को हटा देता है। जब एक नया रिकॉर्ड डाला जाता है तो ऑटोइनक्रिकमेंट हटा देता है जहां इसे हटाने से पहले छोड़ दिया जाता है।

मेरे ident क्षेत्र गुण इस प्रकार हैं:

  • फ़ील्ड प्रकार: integer
  • फील्ड झंडे: PRIMARY KEY, AUTOINCREMENT, UNIQUE

यह बात मैं तालिका बनाया है SQLite Maestro में और मैं DELETE स्टेटमे निष्पादित कर रहा हूं एसक्यूएलएट मेस्ट्रो में भी एनटी?

कोई भी मदद महान होगी।

उत्तर

177

इस प्रयास करें:

delete from your_table;  
delete from sqlite_sequence where name='your_table'; 

SQLite Autoincrement

SQLite सबसे बड़ा ROWID का ट्रैक है कि एक मेज कभी विशेष SQLITE_SEQUENCE तालिका का उपयोग कर कार्य किया है रहता है। SQLITE_SEQUENCE तालिका बनाई गई है और सामान्य तालिका में स्वचालित रूप से प्रारंभ होता है जिसमें स्वत: कॉलम कॉलम बनाया गया है। SQLITE_SEQUENCE तालिका की सामग्री सामान्य अद्यतन, INSERT, और DELETE कथन का उपयोग करके संशोधित की जा सकती है। लेकिन इस तालिका में संशोधन करने के लिए ऑटोमेशन कुंजी पीढ़ी एल्गोरिदम को परेशान करेगा। सुनिश्चित करें कि आप जानते हैं कि आप से पहले आप क्या कर रहे हैं, ऐसे परिवर्तन करें।

+3

धन्यवाद कि पूरी तरह से काम किया है अपने-तालिका में बाद हटा दिया पंक्तियों अद्यतन अनुक्रम द्वारा रीसेट कर सकते हैं की कोशिश करो। – Nathan

+3

बस एक छोटा सा पक्ष नोट: तालिका का नाम जहां खंड केस संवेदनशील है – 321X

+0

@ 321X, यह एक बहुत अच्छा बिंदु है। धन्यवाद। –

0

किसी अन्य विकल्प के रूप में, यदि आप SQLite डेटाबेस ब्राउज़र है और एक जीयूआई समाधान के लिए अधिक इच्छुक हैं, आप sqlite_sequence तालिका जहां क्षेत्र का नाम अपनी मेज का नाम है संपादित कर सकते हैं। फ़ील्ड seq के लिए सेल को डबल क्लिक करें और पॉप-अप संवाद बॉक्स में मान को 0 पर बदलें।

0

आप सामग्री प्रदाता के माध्यम से हर RowId रीसेट करना चाहते हैं इस

rowCounter=1; 
do {    
      rowId = cursor.getInt(0); 
      ContentValues values; 
      values = new ContentValues(); 
      values.put(Table_Health.COLUMN_ID, 
         rowCounter); 
      updateData2DB(context, values, rowId); 
      rowCounter++; 

     while (cursor.moveToNext()); 

public static void updateData2DB(Context context, ContentValues values, int rowId) { 
    Uri uri; 
    uri = Uri.parseContentProvider.CONTENT_URI_HEALTH + "/" + rowId); 
    context.getContentResolver().update(uri, values, null, null); 
} 
23

आप

UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name'; 
संबंधित मुद्दे