আমাকে একটি সারণী থেকে সমস্ত সারি মুছে ফেলতে হবে তবে আমি যখন একটি নতুন সারি যুক্ত করব তখন আমি প্রাথমিক কী আইডি চাই, যার একটি স্বয়ংক্রিয় বৃদ্ধি থাকে, যথাক্রমে 1 থেকে আবার শুরু করতে 1 থেকে।
আমাকে একটি সারণী থেকে সমস্ত সারি মুছে ফেলতে হবে তবে আমি যখন একটি নতুন সারি যুক্ত করব তখন আমি প্রাথমিক কী আইডি চাই, যার একটি স্বয়ংক্রিয় বৃদ্ধি থাকে, যথাক্রমে 1 থেকে আবার শুরু করতে 1 থেকে।
উত্তর:
মুছবেন না, ছাঁটাই ব্যবহার করুন:
Truncate table XXX
সারণী হ্যান্ডলার সর্বশেষ ব্যবহৃত AUTO_INCREMENT মান মনে রাখে না, তবে শুরু থেকে গণনা শুরু করে। এটি মাইআইএসএএম এবং ইনোডিবি-র ক্ষেত্রেও সত্য, যা সাধারণত ক্রম মানগুলি পুনরায় ব্যবহার করে না।
উত্স ।
আপনি যদি ব্যবহার করতে না পারেন TRUNCATE(যেমন বিদেশী কী বাধার কারণে) তবে অটো_সংশোধন পুনরায় চালু করতে সমস্ত সারি মুছে ফেলার পরে আপনি একটি পরিবর্তন সারণী ব্যবহার করতে পারেন:
ALTER TABLE mytable AUTO_INCREMENT = 1
DELETE FROM tablename;(কিন্তু যে ভাল আছে যখন এফ কে সীমাবদ্ধতার হয় কাজ যাচ্ছে না - দেখুন stackoverflow.com/a/5452798/507761 )
যদি টেবিলে বিদেশী কী থাকে তবে আমি সর্বদা নিম্নলিখিত কোডগুলি ব্যবহার করি:
SET FOREIGN_KEY_CHECKS = 0; -- disable a foreign keys check
SET AUTOCOMMIT = 0; -- disable autocommit
START TRANSACTION; -- begin transaction
/*
DELETE FROM table_name;
ALTER TABLE table_name AUTO_INCREMENT = 1;
-- or
TRUNCATE table_name;
-- or
DROP TABLE table_name;
CREATE TABLE table_name ( ... );
*/
SET FOREIGN_KEY_CHECKS = 1; -- enable a foreign keys check
COMMIT; -- make a commit
SET AUTOCOMMIT = 1 ;
তবে পার্থক্য কার্যকর হবে সময়। উপরে সোরিনের উত্তর দেখুন।
একটি আকর্ষণীয় ঘটনা।
আমি নিশ্চিত ছিলাম TRUNCATEসর্বদা আরও ভাল পারফর্ম করতে পারব , তবে আমার ক্ষেত্রে, প্রায় কয়েকটি সারি দিয়ে বিশিষ্ট বিদেশী কী সহ প্রায় 30 টি টেবিল বিশিষ্ট একটি ডাটাবেসটিতে, কয়েক সেকেন্ডে কয়েক সেকেন্ডের TRUNCATEবিপরীতে সমস্ত সারণীতে প্রায় 12 সেকেন্ড সময় লেগেছিলDELETE সারি। স্বতঃবৃদ্ধি নির্ধারণ মোট মোট এক সেকেন্ড যোগ করে, তবে এটি এখনও আরও অনেক ভাল।
সুতরাং আমি উভয়ই চেষ্টা করার পরামর্শ দেব, দেখুন আপনার মামলার জন্য কোনটি দ্রুত কাজ করে।