এসকিউএলাইট রিসেট প্রাথমিক কী ক্ষেত্র


118

আমার এসকিউএলাইটে কয়েকটি টেবিল রয়েছে এবং আমি কীভাবে স্বয়ং-বর্ধিত ডাটাবেস ক্ষেত্রটি পুনরায় সেট করতে পারি তা জানার চেষ্টা করছি।

আমি পড়েছি যা DELETE FROM tablenameসবকিছু মুছে ফেলা উচিত এবং স্বতঃবৃদ্ধি ক্ষেত্রটি পুনরায় সেট করতে হবে 0তবে আমি যখন এটি করি তখন এটি কেবল ডেটা মুছে দেয়। যখন কোনও নতুন রেকর্ড সন্নিবেশ করা হয় তখন মুছে ফেলার আগে যেখানে রেখে গিয়েছিল সেখানে স্ব-সংযোজনটি বাছাই করে।

আমার identক্ষেত্রের বৈশিষ্ট্যগুলি নিম্নরূপ:

  • মাঠের ধরণ :integer
  • ফিল্ড পতাকা : PRIMARY KEY, AUTOINCREMENT,UNIQUE

আমি কি এসকিউএল মায়েস্টোর টেবিলটি তৈরি করেছি এবং এসকিউএলাইট মায়েস্ট্রোতেও আমি DELETEবিবৃতিটি সম্পাদন করছি ?

যেকোনো সাহায্যই অসাধারণ.

উত্তর:


244

এটা চেষ্টা কর:

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

এসকিউএলাইট অটোয়েনক্রিমেন্ট

এসকিউএলাইট সারণী বিশেষ SQLITE_SEQUENCEটেবিলটি ব্যবহার করে যে বৃহত্তম সারণীটি ধরে রেখেছে সেগুলির বৃহত্তম ট্র্যাক রাখে । SQLITE_SEQUENCEটেবিল তৈরি করেছেন এবং স্বয়ংক্রিয়ভাবে সক্রিয়া যখনই একটি স্বাভাবিক টেবিল যে AUTOINCREMENT কলাম ধারণ করে নির্মিত হয়। SQLITE_SEQUENCE টেবিলের বিষয়বস্তু সাধারণ আপডেট, INSERT এবং বিলোপ বিবৃতি ব্যবহার করে সংশোধন করা যেতে পারে। তবে এই টেবিলটিতে সংশোধন করার ফলে অটোইনক্রিমেন্ট কী জেনারেশন অ্যালগরিদমটি সংকুচিত হবে। আপনি যেমন পরিবর্তন আনার আগে আপনি কী করছেন তা নিশ্চিত হয়ে নিন।


9
কেবলমাত্র একটি ছোট দিকের নোট: সারণীর নাম যেখানে ধারাটি সংবেদনশীল
321X

5
অন্য উপায়টি হল sqlite_sequence টেবিল আপডেট করা। sqlite_sequence সেট seq = 0 আপডেট করুন যেখানে নাম = '<tablename>' এটি sqlite_sequence টেবিলের সারিটি পুনরায় সেট করবে না।
বাইনারি

@ বাইনারি, বিকল্প উপায় উল্লেখ করার জন্য ধন্যবাদ :) আমি লক্ষ করতে চাই যে এসকিউএলাইট "মুছে ফেলা" স্থানটিকে পুনরায় ব্যবহার করেছে, সুতরাং আমরা কোন সমাধানটি বেছে নেব তাতে এটি কোনও পার্থক্য করে না।
নিক দানডৌলাকিস

1
মনে রাখবেন যে এসকিউএলাইট কেবলমাত্র স্ক্লাইট_সেক্সেন্স টেবিল তৈরি করে যখন আপনি একটি স্বতঃসংশোধ কলামটি সংজ্ঞায়িত করেন। এর আগে এর অস্তিত্ব নেই।
জাচারি ইয়েটস

@ জাচারি ইয়েটস, প্রকৃতপক্ষে, তবে এটি ইতিমধ্যে উদ্ধৃত পাঠ্যে উল্লেখ করা হয়েছে।
নিক ডান্ডৌলাকিস

47

আপনি আপনার টেবিলের মোছা সারিগুলির পরে আপডেট ক্রমটি পুনরায় সেট করতে পারেন

UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';

ঘরের জন্য এটি কীভাবে করা যায় আমাকে বলতে পারেন?
সাইকো

আপনি @ সাইকো মানে কি? আমি বুঝতে পারি না :)
Huỳnh Ngọc Bang

আসলে আমি জিজ্ঞাসা করছিলাম কীভাবে রুম ডাটাবেসে এটি করবেন ..... ঠিক এখনই সমস্যাটি সমাধান করা হয়েছে
সাইকো

@ সাইকো আপনি কী আমাকে রুম ডাটাবেস ব্যবহার করে এটি ব্যবহার করতে পারেন তা বলতে পারেন?
প্রকাশপুন

1

বিকল্প বিকল্প হিসাবে, আপনার যদি স্ক্লাইট ডাটাবেস ব্রাউজার থাকে এবং আপনি জিইউআই সমাধানের দিকে ঝুঁকেন তবে আপনি sqlite_sequence টেবিলটি সম্পাদন করতে পারেন যেখানে ক্ষেত্রের নামটি আপনার সারণির নাম। ক্ষেত্রের সেকের জন্য ঘরে ডাবল ক্লিক করুন এবং পপ আপ হওয়া ডায়লগ বাক্সে মানটি 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);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.