মাইএসকিউএল টেবিল থেকে সমস্ত সারি মুছুন এবং শূন্য আইডি পুনরায় সেট করুন


182

আমাকে একটি সারণী থেকে সমস্ত সারি মুছে ফেলতে হবে তবে আমি যখন একটি নতুন সারি যুক্ত করব তখন আমি প্রাথমিক কী আইডি চাই, যার একটি স্বয়ংক্রিয় বৃদ্ধি থাকে, যথাক্রমে 1 থেকে আবার শুরু করতে 1 থেকে।

উত্তর:


303

মুছবেন না, ছাঁটাই ব্যবহার করুন:

Truncate table XXX

সারণী হ্যান্ডলার সর্বশেষ ব্যবহৃত AUTO_INCREMENT মান মনে রাখে না, তবে শুরু থেকে গণনা শুরু করে। এটি মাইআইএসএএম এবং ইনোডিবি-র ক্ষেত্রেও সত্য, যা সাধারণত ক্রম মানগুলি পুনরায় ব্যবহার করে না।

উত্স


20
ছাঁটাই অ-সীমাবদ্ধ টেবিলগুলির সাথে ভালভাবে কাজ করে তবে আপনার টেবিলে যদি কোনও বিদেশী কী বাধা থাকে, আপনি মুছুন পদ্ধতিটি ব্যবহার করতে পারেন। আপনার কাছে এফ কে বাধা থাকলে এই পোস্টটি দেখুন: বিদেশী কী বাধা টেবিল কেটে
ফেলুন

1
মনে রাখবেন যে কাটা টেবিলটি রোলব্যাক করবে না
Penny chan

83

আপনি যদি ব্যবহার করতে না পারেন TRUNCATE(যেমন বিদেশী কী বাধার কারণে) তবে অটো_সংশোধন পুনরায় চালু করতে সমস্ত সারি মুছে ফেলার পরে আপনি একটি পরিবর্তন সারণী ব্যবহার করতে পারেন:

ALTER TABLE mytable AUTO_INCREMENT = 1

3
@ এনভারগাভ যেহেতু আপনি আপনার টেবিলটিতে মাইআইএসএএম এর পরিবর্তে ইনোডিবি ইঞ্জিন ব্যবহার করছেন, প্রথমটি সূচকটি পুনরায় সেট করা সমর্থন করে না।
গুস্তাভো রুবিও

কিভাবে auto_increment মান পরিবর্তনের আগে সব সারি মোছা
Kasun Siyambalapitiya

@KasunSiyambalapitiya DELETE FROM tablename;(কিন্তু যে ভাল আছে যখন এফ কে সীমাবদ্ধতার হয় কাজ যাচ্ছে না - দেখুন stackoverflow.com/a/5452798/507761 )
ম্যাথু পড়ুন

17

যদি টেবিলে বিদেশী কী থাকে তবে আমি সর্বদা নিম্নলিখিত কোডগুলি ব্যবহার করি:

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 ;

তবে পার্থক্য কার্যকর হবে সময়। উপরে সোরিনের উত্তর দেখুন।


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

8

একটি আকর্ষণীয় ঘটনা।

আমি নিশ্চিত ছিলাম TRUNCATEসর্বদা আরও ভাল পারফর্ম করতে পারব , তবে আমার ক্ষেত্রে, প্রায় কয়েকটি সারি দিয়ে বিশিষ্ট বিদেশী কী সহ প্রায় 30 টি টেবিল বিশিষ্ট একটি ডাটাবেসটিতে, কয়েক সেকেন্ডে কয়েক সেকেন্ডের TRUNCATEবিপরীতে সমস্ত সারণীতে প্রায় 12 সেকেন্ড সময় লেগেছিলDELETE সারি। স্বতঃবৃদ্ধি নির্ধারণ মোট মোট এক সেকেন্ড যোগ করে, তবে এটি এখনও আরও অনেক ভাল।

সুতরাং আমি উভয়ই চেষ্টা করার পরামর্শ দেব, দেখুন আপনার মামলার জন্য কোনটি দ্রুত কাজ করে।


2

আপনি যদি এটি ব্যবহার করতে চান তবে truncate:

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE table $table_name; 
SET FOREIGN_KEY_CHECKS = 1;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.