যেসব ডাটাবেস ম্যানেজমেন্ট সিস্টেমে (যেমন MySQL, PostgreSQL) TRUNCATE TABLE কমান্ড ব্যবহার করে টেবিলের সমস্ত ডেটা দ্রুত মুছে ফেলা যায়, SQLite-তে এমন কোনো কমান্ড সরাসরি নেই। তবে চিন্তার কিছু নেই – SQLite আমাদের শক্তিশালী DELETE ও DROP TABLE কমান্ড দিয়েছে, যা একই কাজ করতে পারে, কিছু অতিরিক্ত কৌশল সহ। আজকের পর্বে আমরা শিখব কীভাবে SQLite-তে টেবিল সম্পূর্ণ খালি করা যায়, কোন পদ্ধতি কখন ব্যবহার করা উচিত, এবং VACUUM কেন প্রয়োজন।
পূর্বপ্রস্তুতি
- SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
- আমরা
COMPANYটেবিল ব্যবহার করব।truncate_demo.dbনামে ডাটাবেস প্রস্তুত করি।
টার্মিনাল:
bash
sqlite3 truncate_demo.db
sql
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); INSERT INTO COMPANY VALUES (1, 'Paul', 32, 'California', 20000.00); INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000.00); INSERT INTO COMPANY VALUES (3, 'Teddy', 23, 'Norway', 20000.00); INSERT INTO COMPANY VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00); INSERT INTO COMPANY VALUES (5, 'David', 27, 'Texas', 85000.00); INSERT INTO COMPANY VALUES (6, 'Kim', 22, 'South-Hall', 45000.00); INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00);
- আউটপুট সুন্দর করতে:
.header on,.mode column।
১. কেন SQLite-তে TRUNCATE TABLE নেই?
TRUNCATE TABLE সাধারণত টেবিলের সমস্ত সারি খুব দ্রুত মুছে ফেলে, কারণ এটি প্রতিটি সারি ডিলিট না করে পুরো ডেটা পেজ রিলিজ করে। SQLite-তে ডিজাইন এমন যে, DELETE দিয়েও পুরো টেবিল সাফ করা যায়, তবে এটি প্রতিটি সারি একটিভাবে ডিলিট করে। তবে বিকল্প হিসেবে DROP TABLE + পুনরায় CREATE TABLE আরও দ্রুত এবং কার্যকর।
SQLite ডেভেলপাররা একটি সুস্পষ্ট TRUNCATE কমান্ড যোগ করেননি; বরং ব্যবহারকারীদের পরিস্থিতি অনুযায়ী DELETE অথবা DROP + CREATE ব্যবহারের স্বাধীনতা দিয়েছেন।
২. পদ্ধতি ১: DELETE FROM table_name (সব রেকর্ড মুছুন)
সবচেয়ে সরাসরি পদ্ধতি হলো WHERE ক্লজ ছাড়া DELETE ব্যবহার করা।
sql
DELETE FROM COMPANY;
এটি COMPANY টেবিলের প্রতিটি সারি মুছে ফেলবে, কিন্তু টেবিলের গঠন (schema) অক্ষত থাকবে। পরবর্তীতে নতুন রেকর্ড ইনসার্ট করতে কোনো বাধা নেই।
পরীক্ষা:
sql
SELECT * FROM COMPANY; -- কোনো সারি নেই
সুবিধা:
- টেবিল টিকে থাকে, কোনো রি-ক্রিয়েশন দরকার নেই।
- টেবিলের সাথে যুক্ত ইনডেক্স, ট্রিগার, ভিউ অপরিবর্তিত থাকে।
অসুবিধা:
- বড় টেবিলে এটি ধীরগতির হতে পারে, কারণ প্রতিটি সারি ডিলিট হয় এবং জার্নালে রেকর্ড হয়।
- ডিলিট করার পর ডিস্ক স্পেস পুরোপুরি খালি হয় না; ডাটাবেস ফাইল আকার অপরিবর্তিত থাকতে পারে।
স্পেস খালি করতে VACUUM:DELETE করার পর অপ্রয়োজনীয় স্থান পুনরুদ্ধার করতে VACUUM কমান্ড চালানো উচিত।
sql
VACUUM;
এটি ডাটাবেস ফাইলকে পুনর্গঠন করে ফাঁকা জায়গা রিলিজ করে।
৩. পদ্ধতি ২: DROP TABLE + CREATE TABLE (টেবিল রি-ক্রিয়েট)
সবচেয়ে দ্রুত এবং নিশ্চিত পদ্ধতি হলো টেবিলটি ড্রপ করে পুনরায় তৈরি করা।
sql
DROP TABLE COMPANY; CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
এখন COMPANY টেবিল একেবারে নতুন ও খালি।
সুবিধা:
- অত্যন্ত দ্রুত, বিশেষ করে বড় টেবিলের জন্য।
- ডাটাবেস ফাইলের সাইজ সঙ্গে সঙ্গে অপ্টিমাইজ হয় (যদি টেবিলটি প্রধান ডেটা ধারণ করত)।
- কোনো অতিরিক্ত VACUUM দরকার নেই।
অসুবিধা:
- টেবিলের সাথে যুক্ত ইনডেক্স, ট্রিগার, ভিউ হারিয়ে যায় (যদি না পুনরায় তৈরি করেন)।
- টেবিলের স্কিমা আবার লিখতে হয়; ভুল হলে সমস্যা হতে পারে।
এই পদ্ধতি তখনই বেছে নেবেন যখন টেবিলের স্কিমা আপনার ভালোভাবে জানা এবং সংশ্লিষ্ট অন্যান্য ডাটাবেস অবজেক্ট (ইনডেক্স, ট্রিগার) পুনর্নির্মাণ করতে প্রস্তুত থাকেন।
৪. VACUUM-এর ভূমিকা
উভয় পদ্ধতির পরেও ডাটাবেস ফাইলের আকার কমানোর জন্য VACUUM প্রয়োজন হতে পারে, বিশেষ করে DELETE ব্যবহার করলে। VACUUM পুরো ডাটাবেসকে একটি নতুন ফাইলে কপি করে, অব্যবহৃত স্থান বাদ দিয়ে। এটি কিছুটা সময়সাপেক্ষ এবং অপারেশন চলাকালে ডাটাবেসে এক্সক্লুসিভ লক নেয়।
sql
VACUUM;
আপনি PRAGMA auto_vacuum = FULL সেট করলে ভবিষ্যতে ডিলিট স্বয়ংক্রিয়ভাবে স্থান খালি করতে পারে, কিন্তু বিদ্যমান ডেটার জন্য ম্যানুয়াল VACUUM-ই ভরসা।
৫. কখন কোন পদ্ধতি ব্যবহার করবেন?
- ছোট টেবিল, সরল চাহিদা:
DELETE FROM table; VACUUM;ব্যবহার করুন। - বড় টেবিল, স্কিমা অপরিবর্তিত থাকবে:
DROP + CREATEদ্রুততর। তবে আগে থেকে টেবিলের CREATE স্টেটমেন্ট সংরক্ষণ করে রাখুন (.schema table_nameদিয়ে দেখা)। - যদি ফরেন কি সম্পর্কিত টেবিল থাকে:
DELETEব্যবহার করাই নিরাপদ, কারণ DROP করলে সম্পর্কিত টেবিলের কনস্ট্রেইন্ট ভায়োলেশন হতে পারে (অথবাPRAGMA foreign_keys = OFFকরতে হতে পারে)।
৬. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
শুধুমাত্র truncate_demo.db ফাইলটি ব্যবহৃত হচ্ছে। VACUUM অস্থায়ীভাবে একটি কপি তৈরি করতে পারে (যেমন truncate_demo.db-vacuum), কিন্তু কাজ শেষে মূল ফাইলটি রিপ্লেস হয়। কোনো অতিরিক্ত প্যাকেজ লাগবে না।
৭. গুরুত্বপূর্ণ টিপস
- ব্যাকআপ নিতে ভুলবেন না: পুরো টেবিল খালি করার আগে
.backupবা.dumpদিয়ে ব্যাকআপ নিন। - ট্রানজ্যাকশন ব্যবহার:
BEGIN; DELETE FROM COMPANY;– তারপর ভুল হলেROLLBACKকরতে পারবেন। DROP + CREATE বেলায় এটি কাজ করবে না, কারণ DROP অটো-কমিট হয়। - sqlite_sequence রিসেট: যদি
AUTOINCREMENTব্যবহার করেন,DELETEকরলেsqlite_sequenceটেবিলের মান রিসেট হয় না। সম্পূর্ণ রিসেট চাইলেDELETE FROM sqlite_sequence WHERE name='COMPANY';চালান, অথবা DROP + CREATE করুন যা স্বয়ংক্রিয়ভাবে রিসেট হয়। - VACUUM নিয়মিত করবেন না: VACUUM সময়সাপেক্ষ, প্রয়োজনেই করুন।
৮. সম্পূর্ণ অনুশীলন সেশন
টার্মিনালে নিচের ধাপগুলো চালান:
sql
.headers on .mode column -- বর্তমান রেকর্ড দেখি SELECT * FROM COMPANY; -- পদ্ধতি ১: DELETE + VACUUM DELETE FROM COMPANY; SELECT COUNT(*) FROM COMPANY; -- 0 VACUUM; -- আবার ডেটা ইনসার্ট করি (ঐচ্ছিক) INSERT INTO COMPANY VALUES (1, 'Paul', 32, 'California', 20000.00); INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000.00); -- পদ্ধতি ২: DROP + CREATE (দ্রুত) DROP TABLE COMPANY; CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); SELECT * FROM COMPANY; -- খালি
পরবর্তী পর্বে
আমরা শিখব SQLite Views – ভার্চুয়াল টেবিল তৈরি ও ব্যবহার করে ডেটা উপস্থাপনের কৌশল।
লেখকের কথা: TRUNCATE না থাকলেও SQLite আপনাকে পুরো টেবিল সাফ করার সব হাতিয়ার দিয়েছে। সঠিক পদ্ধতি বেছে নিন এবং নিরাপদে কাজ করুন। বাংলায় এই টিউটোরিয়াল সিরিজ আপনার ডাটাবেস দক্ষতা বাড়াতে বদ্ধপরিকর। ভালো লাগলে শেয়ার করুন এবং ToLearnTeam.com সাবস্ক্রাইব করতে ভুলবেন না। আপনার কোনো প্রশ্ন থাকলে কমেন্টে জানান – আমরা উত্তর দিতে মুখিয়ে আছি!
SQLite Full Course
- SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
- SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
- SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
- SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
- SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
- SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
- SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
- SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
- SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
- SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
- SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
- SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
- SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
- SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
- SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
- SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
- SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
- SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
- SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
- SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
- SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
- SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
- SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
- SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
- SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
- SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
- SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
- SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
- SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
- SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
- SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
- SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
- SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
- SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
- SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
- SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
- SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
- SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
- SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
