VACUUM Archives - To Learn Team https://tolearnteam.com/tag/vacuum/ Learn about Everything Online Sat, 08 Aug 2026 04:51:57 +0000 en-US hourly 1 https://wordpress.org/?v=7.1.2 https://tolearnteam.com/wp-content/uploads/2026/07/cropped-Logo-32x32.png VACUUM Archives - To Learn Team https://tolearnteam.com/tag/vacuum/ 32 32 SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল) https://tolearnteam.com/sqlite-vacuum-bangla/ Sat, 08 Aug 2026 03:36:43 +0000 http://tolearnteam.com/?p=2234 SQLite ডাটাবেস দীর্ঘদিন ব্যবহার করলে অনেক INSERT, UPDATE, DELETE-এর ফলে ফাইলের ভেতর ফাঁকা জায়গা (free pages) জমা হয়। এতে ডাটাবেস ফাইল অপ্রয়োজনীয়ভাবে বড় হয়ে যায় এবং কিছু ক্ষেত্রে পারফরম্যান্সও কমতে…

The post SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল) appeared first on To Learn Team.

]]>
SQLite ডাটাবেস দীর্ঘদিন ব্যবহার করলে অনেক INSERT, UPDATE, DELETE-এর ফলে ফাইলের ভেতর ফাঁকা জায়গা (free pages) জমা হয়। এতে ডাটাবেস ফাইল অপ্রয়োজনীয়ভাবে বড় হয়ে যায় এবং কিছু ক্ষেত্রে পারফরম্যান্সও কমতে পারে। VACUUM কমান্ড এই সমস্যার সমাধান করে। এটি সম্পূর্ণ ডাটাবেসকে একটি অস্থায়ী ফাইলে কপি করে সেখান থেকে আবার মূল ফাইলটিকে সাজিয়ে-গুছিয়ে তৈরি করে, ফলে ফাঁকা জায়গা বাদ পড়ে এবং টেবিল ডেটা ধারাবাহিকভাবে সাজানো থাকে। এছাড়াও SQLite-তে auto_vacuum নামে একটি স্বয়ংক্রিয় ব্যবস্থা আছে যা ডিলিট করা পেজগুলোকে ফাইলের শেষে সরিয়ে ডাটাবেসের আকার ছোট রাখে। আজ আমরা ম্যানুয়াল VACUUM, auto_vacuum PRAGMA এবং এদের পার্থক্য উদাহরণসহ শিখব।


পূর্বপ্রস্তুতি

  • SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
  • আমরা vacuum_demo.db নামে একটি ডাটাবেস তৈরি করব, যাতে কিছু বড় ডেটা ইনসার্ট করে পরে ডিলিট করলে ফাঁকা জায়গা বোঝা যায়।

টার্মিনাল:

bash

sqlite3 vacuum_demo.db

sql

-- COMPANY টেবিল
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);
-- পুনরাবৃত্তি করে আরও বড় করি (কয়েকবার INSERT)
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 14
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 28
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 56
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 112
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 224
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 448
-- প্রায় 448 রেকর্ড, এখন আকার দেখব
  • আউটপুট ফরম্যাট: .header on, .mode column।

১. ম্যানুয়াল VACUUM কমান্ড

VACUUM কমান্ড ডাটাবেস ফাইলকে সম্পূর্ণভাবে পুনর্গঠন করে। এটি প্রথমে মূল ডাটাবেসের কনটেন্ট একটি টেম্প ফাইলে কপি করে, তারপর সেই কপি থেকে মূল ফাইলটি নতুন করে তৈরি করে, ফলে সব ফ্রি পেজ বাদ পড়ে এবং ডেটা ধারাবাহিকভাবে সংরক্ষিত হয়।

সিনট্যাক্স:

sql

VACUUM;

অথবা কমান্ড লাইন থেকে:

bash

sqlite3 database_name "VACUUM;"

উদাহরণ:
প্রথমে ডাটাবেস ফাইলের বর্তমান আকার দেখতে আমরা .shell বা OS-এর ls -l (লিনাক্স/ম্যাক) বা dir (উইন্ডোজ) ব্যবহার করতে পারি। SQLite শেলে নিচের মত করে দেখা যায়:

sql

-- SQLite শেলে আকার দেখা (বাইটে)
-- লিনাক্স/ম্যাক: .shell ls -l vacuum_demo.db
-- উইন্ডোজ: .shell dir vacuum_demo.db

এখন আমরা প্রায় অর্ধেক রেকর্ড ডিলিট করি:

sql

DELETE FROM COMPANY WHERE ID % 2 = 0; -- জোড় আইডি ডিলিট

ডিলিট করার পর ডাটাবেস ফাইল আকার সাধারণত কমে না; ফ্রি পেজ রয়ে যায়। এখন VACUUM চালাই:

sql

VACUUM;

এরপর ফাইলের আকার পরীক্ষা করলে দেখা যাবে তা অনেকটাই কমে গেছে এবং অপ্রয়োজনীয় স্থান আর নেই।

মনে রাখবেন:

  • VACUUM চলাকালে ডাটাবেসে এক্সক্লুসিভ লক নেয়; অন্য কোনো অপারেশন চলতে পারে না।
  • কোনো সক্রিয় ট্রানজ্যাকশন থাকলে VACUUM ব্যর্থ হবে।
  • ইন-মেমরি ডাটাবেসে VACUUM-এর কোনো প্রভাব নেই (no-op)।
  • VACUUM-এর ফলে ROWID বা INTEGER PRIMARY KEY ছাড়া টেবিলের rowid পরিবর্তিত হতে পারে (সাধারণত টেবিল পুনর্গঠনের জন্য)।
  • VACUUM দিয়ে ডাটাবেসের পেজ সাইজ, এনকোডিং ইত্যাদি কনফিগারেশনও পরিবর্তন করা সম্ভব (তবে তা উন্নত বিষয়)।

২. নির্দিষ্ট টেবিলের VACUUM (SQLite 3.34+)

সাম্প্রতিক SQLite সংস্করণে আপনি নির্দিষ্ট টেবিলের জন্যও VACUUM চালাতে পারেন (যদিও এটি মূলত পুরো ডাটাবেসই পুনর্গঠন করে, শুধু টেবিলের নাম দিয়ে ডাটাবেস ভ্যাকুয়াম করে)।

sql

VACUUM table_name;

তবে এই ফিচারটি 3.34.0 থেকে আসলেও পুরো ডাটাবেসের মতোই কাজ করে; টেবিলের নাম দেওয়া হলে সংশ্লিষ্ট টেবিলের ডেটা ধারাবাহিক হবে।


৩. Auto-VACUUM – স্বয়ংক্রিয় স্থান সংকোচন

auto_vacuum PRAGMA সেট করলে SQLite নিজেই ডিলিট হওয়া পেজগুলোকে ট্র্যাক করে এবং ফাঁকা জায়গাগুলো ডাটাবেস ফাইলের শেষে সরিয়ে নেয়, যাতে সময়ের সাথে ফাইল আকার বাড়তে না পারে। এটি ম্যানুয়াল VACUUM-এর চেয়ে আলাদা: auto_vacuum ফাঁকা পেজগুলোকে শেষে সরায় (ফলে ফাইল ছোট হয়) কিন্তু পুরো ডিফ্র্যাগমেন্টেশন করে না; ম্যানুয়াল VACUUM পুরো ডাটাবেসকে নতুন করে সাজায়।

PRAGMA মান:

  • NONE (0): auto_vacuum বন্ধ (ডিফল্ট)।
  • FULL (1): সম্পূর্ণ auto_vacuum চালু; প্রতিবার ডিলিট হলে ফাঁকা পেজ ফাইলের শেষে চলে যায়।
  • INCREMENTAL (2): auto_vacuum চালু, কিন্তু ফাঁকা পেজগুলি incremental_vacuum PRAGMA দিয়ে ম্যানুয়ালি সরাতে হবে, স্বয়ংক্রিয়ভাবে নয়।

সেটিং:

sql

PRAGMA auto_vacuum = FULL;   -- চালু
PRAGMA auto_vacuum = NONE;   -- বন্ধ
PRAGMA auto_vacuum = INCREMENTAL; -- ইনক্রিমেন্টাল

বর্তমান সেটিং দেখা:

sql

PRAGMA auto_vacuum;

অথবা কমান্ড লাইন থেকে:

bash

sqlite3 database_name "PRAGMA auto_vacuum;"

গুরুত্বপূর্ণ: auto_vacuum সেটিং পরিবর্তন করলে তা নতুন করে VACUUM না চালানো পর্যন্ত কার্যকর হয় না। অর্থাৎ, সেট করার পরপরই VACUUM কমান্ড দিতে হবে যাতে পরিবর্তন স্থায়ী হয়।

কখন কোনটি ব্যবহার করবেন?

  • যদি আপনার ডাটাবেসে ঘন ঘন ডিলিট হয় এবং ফাইলের আকার বেড়ে যাওয়া সমস্যা, তাহলে auto_vacuum = FULL সেট করে দিন এবং একটি প্রাথমিক VACUUM চালান। তবে এতে ইনসার্ট/ডিলিট কিছুটা ধীর হতে পারে।
  • INCREMENTAL বেছে নিলে আপনি নিজে কন্ট্রোল করে PRAGMA incremental_vacuum দিয়ে ধাপে ধাপে স্পেস রিক্লেইম করতে পারেন।
  • যদি ফাইলের আকার নিয়ে বিশেষ চিন্তা না থাকে এবং সর্বোচ্চ পারফরম্যান্স চান, তাহলে auto_vacuum বন্ধ রাখাই ভালো, মাঝে মাঝে ম্যানুয়াল VACUUM করবেন।

৪. ডিরেক্টরি স্ট্রাকচার ও ফাইলের আকার

ডাটাবেস ফাইল: vacuum_demo.db। VACUUM চালানোর সময় একটি অস্থায়ী টেম্প ফাইল তৈরি হতে পারে (যেমন vacuum_demo.db-vacuum), কিন্তু শেষে তা মুছে মূল ফাইল রিপ্লেস করে।

text

project-folder/
└── vacuum_demo.db

কোনো অতিরিক্ত প্যাকেজ ইন্সটল করতে হবে না।


৫. গুরুত্বপূর্ণ টিপস

  • VACUUM চলাকালে ব্যাকআপ: যেহেতু VACUUM পুরো ডাটাবেস পুনর্লিখন করে, এটি বড় ডাটাবেসে সময়সাপেক্ষ। ভুলক্রমে বাধা পেলে ডাটাবেস নষ্ট হতে পারে, তাই আগে .backup নিয়ে নিন।
  • সক্রিয় ট্রানজ্যাকশন এড়ান: VACUUM চালানোর আগে নিশ্চিত হন যে কোনো অসমাপ্ত ট্রানজ্যাকশন নেই; BEGIN করার পর VACUUM করলে এরর আসবে।
  • VACUUM-এর পর ROWID: INTEGER PRIMARY KEY না থাকলে VACUUM-এর ফলে ROWID পরিবর্তন হতে পারে, যা কিছু অ্যাপ্লিকেশনে সমস্যা সৃষ্টি করতে পারে।
  • ফাইল সিস্টেম: VACUUM-এর জন্য পর্যাপ্ত ডিস্ক স্পেস থাকা দরকার, কারণ একটি সম্পূর্ণ কপি তৈরি হয়।
  • পিরিয়ডিক VACUUM: বড় ডাটাবেসের ক্ষেত্রে নিয়মিত রক্ষণাবেক্ষণ হিসেবে VACUUM চালানো ভালো, তবে ব্যস্ত সময়ে নয়।
  • auto_vacuum = INCREMENTAL: এই সেটিং-এ ফাঁকা পেজগুলো PRAGMA incremental_vacuum(N) দিয়ে ধাপে ধাপে ফ্রি করা যায়, যা দীর্ঘমেয়াদী অপারেশনের জন্য সুবিধাজনক।

৬. সম্পূর্ণ অনুশীলন সেশন

sql

.headers on
.mode column

-- বর্তমান auto_vacuum সেটিং দেখি
PRAGMA auto_vacuum;

-- বর্তমান ডাটাবেস সাইজ (OS কমান্ড ব্যবহার করে, নিচে উদাহরণ)
-- .shell ls -l vacuum_demo.db  (লিনাক্স/ম্যাক)
-- .shell dir vacuum_demo.db    (উইন্ডোজ)

-- কিছু ডেটা ডিলিট করে ফ্রি স্পেস তৈরি করি
DELETE FROM COMPANY WHERE ID % 3 = 0;
-- ফাইল সাইজ অপরিবর্তিত থাকতে পারে।

-- ম্যানুয়াল VACUUM
VACUUM;
-- এখন আবার ফাইল সাইজ দেখুন, ছোট হয়েছে।

-- auto_vacuum = FULL সেট করি এবং VACUUM দিয়ে প্রয়োগ করি
PRAGMA auto_vacuum = FULL;
VACUUM;
PRAGMA auto_vacuum;   -- 1 (FULL)

-- কিছু ইনসার্ট ও ডিলিট করি; auto_vacuum কাজ করবে কিনা পর্যবেক্ষণ
INSERT INTO COMPANY VALUES (999, 'Test', 99, 'Nowhere', 0);
DELETE FROM COMPANY WHERE ID = 999;

-- আবার VACUUM ছাড়াই ফাইলের আকার দেখতে পারি (FULL মোডে কিছুটা রক্ষণাবেক্ষণ হবে)
-- আবার auto_vacuum বন্ধ করে দিতে চাইলে:
PRAGMA auto_vacuum = NONE;
VACUUM;

পরবর্তী পর্বে

আমরা শিখব SQLite Useful Functions – DATE, TIME, String, Math ইত্যাদি বিল্ট-ইন ফাংশনের ব্যবহার।

লেখকের কথা: VACUUM আপনার ডাটাবেসকে স্বাস্থ্যবান রাখে। বড় ডাটাবেসে একে নিয়মিত ব্যবহার করা ভালো। বাংলায় SQLite শেখার এই সিরিজের প্রতি আপনার আগ্রহ আমাদের স্পৃহা বাড়ায়। পোস্টটি ভালো লাগলে শেয়ার করুন, এবং সম্পূর্ণ সিরিজের আপডেট পেতে ToLearnTeam.com সাবস্ক্রাইব করুন। কোনো জিজ্ঞাসা থাকলে কমেন্টে জানান – আমরা উত্তর দিতে প্রস্তুত!SQLite সিরিজের চতুশ্চত্বারিংশ পর্ব: VACUUM – ডাটাবেস পরিষ্কার ও সংকোচন

মেটাডেটা

  • শিরোনাম (Title): SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  • বর্ণনা (Description): SQLite-তে VACUUM কমান্ড দিয়ে কিভাবে ডাটাবেস ফাইল পুনর্গঠন করে অপ্রয়োজনীয় জায়গা খালি করবেন, ম্যানুয়াল VACUUM, auto_vacuum PRAGMA (NONE, FULL, INCREMENTAL) এর সেটিংস, ডিফ্র্যাগমেন্টেশন ও ROWID-এর প্রভাব – উদাহরণসহ বিস্তারিত বাংলা টিউটোরিয়াল।
  • ফোকাস কীওয়ার্ড: SQLite VACUUM auto_vacuum PRAGMA FULL INCREMENTAL NONE Bangla tutorial
  • ট্যাগ: SQLite, VACUUM, বাংলা টিউটোরিয়াল, auto_vacuum, ডাটাবেস অপ্টিমাইজেশন, PRAGMA
  • স্লাগ: sqlite-vacuum-bangla
  • ফিচার ইমেজ কনসেপ্ট প্রম্পট (16:9): একটি নরম গ্রেডিয়েন্ট ব্যাকগ্রাউন্ডের আধুনিক প্রযুক্তি শিক্ষার ব্যানার। বামে SQLite ফেদার লোগো। কেন্দ্রে একটি ভ্যাকুয়াম ক্লিনার আইকন একটি ডাটাবেস সিলিন্ডার পরিষ্কার করছে, সাথে বাংলা শিরোনাম “VACUUM কমান্ড” বোল্ড টাইপোগ্রাফিতে। নিচে VACUUM; এবং PRAGMA auto_vacuum = FULL; কোড স্নিপেট ভাসমান। পেশাদার ও পরিষ্কার ভাব।
  • অল্ট টেক্সট: SQLite VACUUM কমান্ড ও auto_vacuum PRAGMA দিয়ে ডাটাবেস অপ্টিমাইজ করার বাংলা টিউটোরিয়াল

ভূমিকা

SQLite ডাটাবেস দীর্ঘদিন ব্যবহার করলে অনেক INSERT, UPDATE, DELETE-এর ফলে ফাইলের ভেতর ফাঁকা জায়গা (free pages) জমা হয়। এতে ডাটাবেস ফাইল অপ্রয়োজনীয়ভাবে বড় হয়ে যায় এবং কিছু ক্ষেত্রে পারফরম্যান্সও কমতে পারে। VACUUM কমান্ড এই সমস্যার সমাধান করে। এটি সম্পূর্ণ ডাটাবেসকে একটি অস্থায়ী ফাইলে কপি করে সেখান থেকে আবার মূল ফাইলটিকে সাজিয়ে-গুছিয়ে তৈরি করে, ফলে ফাঁকা জায়গা বাদ পড়ে এবং টেবিল ডেটা ধারাবাহিকভাবে সাজানো থাকে। এছাড়াও SQLite-তে auto_vacuum নামে একটি স্বয়ংক্রিয় ব্যবস্থা আছে যা ডিলিট করা পেজগুলোকে ফাইলের শেষে সরিয়ে ডাটাবেসের আকার ছোট রাখে। আজ আমরা ম্যানুয়াল VACUUM, auto_vacuum PRAGMA এবং এদের পার্থক্য উদাহরণসহ শিখব।


পূর্বপ্রস্তুতি

  • SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
  • আমরা vacuum_demo.db নামে একটি ডাটাবেস তৈরি করব, যাতে কিছু বড় ডেটা ইনসার্ট করে পরে ডিলিট করলে ফাঁকা জায়গা বোঝা যায়।

টার্মিনাল:

bash

sqlite3 vacuum_demo.db

sql

-- COMPANY টেবিল
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);
-- পুনরাবৃত্তি করে আরও বড় করি (কয়েকবার INSERT)
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 14
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 28
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 56
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 112
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 224
INSERT INTO COMPANY SELECT * FROM COMPANY; -- 448
-- প্রায় 448 রেকর্ড, এখন আকার দেখব
  • আউটপুট ফরম্যাট: .header on, .mode column।

১. ম্যানুয়াল VACUUM কমান্ড

VACUUM কমান্ড ডাটাবেস ফাইলকে সম্পূর্ণভাবে পুনর্গঠন করে। এটি প্রথমে মূল ডাটাবেসের কনটেন্ট একটি টেম্প ফাইলে কপি করে, তারপর সেই কপি থেকে মূল ফাইলটি নতুন করে তৈরি করে, ফলে সব ফ্রি পেজ বাদ পড়ে এবং ডেটা ধারাবাহিকভাবে সংরক্ষিত হয়।

সিনট্যাক্স:

sql

VACUUM;

অথবা কমান্ড লাইন থেকে:

bash

sqlite3 database_name "VACUUM;"

উদাহরণ:
প্রথমে ডাটাবেস ফাইলের বর্তমান আকার দেখতে আমরা .shell বা OS-এর ls -l (লিনাক্স/ম্যাক) বা dir (উইন্ডোজ) ব্যবহার করতে পারি। SQLite শেলে নিচের মত করে দেখা যায়:

sql

-- SQLite শেলে আকার দেখা (বাইটে)
-- লিনাক্স/ম্যাক: .shell ls -l vacuum_demo.db
-- উইন্ডোজ: .shell dir vacuum_demo.db

এখন আমরা প্রায় অর্ধেক রেকর্ড ডিলিট করি:

sql

DELETE FROM COMPANY WHERE ID % 2 = 0; -- জোড় আইডি ডিলিট

ডিলিট করার পর ডাটাবেস ফাইল আকার সাধারণত কমে না; ফ্রি পেজ রয়ে যায়। এখন VACUUM চালাই:

sql

VACUUM;

এরপর ফাইলের আকার পরীক্ষা করলে দেখা যাবে তা অনেকটাই কমে গেছে এবং অপ্রয়োজনীয় স্থান আর নেই।

মনে রাখবেন:

  • VACUUM চলাকালে ডাটাবেসে এক্সক্লুসিভ লক নেয়; অন্য কোনো অপারেশন চলতে পারে না।
  • কোনো সক্রিয় ট্রানজ্যাকশন থাকলে VACUUM ব্যর্থ হবে।
  • ইন-মেমরি ডাটাবেসে VACUUM-এর কোনো প্রভাব নেই (no-op)।
  • VACUUM-এর ফলে ROWID বা INTEGER PRIMARY KEY ছাড়া টেবিলের rowid পরিবর্তিত হতে পারে (সাধারণত টেবিল পুনর্গঠনের জন্য)।
  • VACUUM দিয়ে ডাটাবেসের পেজ সাইজ, এনকোডিং ইত্যাদি কনফিগারেশনও পরিবর্তন করা সম্ভব (তবে তা উন্নত বিষয়)।

২. নির্দিষ্ট টেবিলের VACUUM (SQLite 3.34+)

সাম্প্রতিক SQLite সংস্করণে আপনি নির্দিষ্ট টেবিলের জন্যও VACUUM চালাতে পারেন। এটি আসলে পুরো ডাটাবেসকেই পুনর্গঠন করে এবং টেবিলের নাম দিয়ে নির্দিষ্ট করে।

sql

VACUUM table_name;

উদাহরণ:

sql

VACUUM COMPANY;

এতে COMPANY টেবিলের ডেটা ধারাবাহিক হবে এবং পুরো ডাটাবেস সংকুচিত হবে। বাস্তবে এটি পুরো ডাটাবেসের VACUUM-এর সমতুল্য, শুধু টেবিল ফিল্টারিং নয়। তাই VACUUM আর VACUUM table_name-এর মধ্যে তেমন কার্যকরী পার্থক্য নেই, কিন্তু নাম উল্লেখ করলে আপনি উদ্দেশ্য স্পষ্ট করতে পারেন।


৩. Auto-VACUUM – স্বয়ংক্রিয় স্থান সংকোচন

auto_vacuum PRAGMA সেট করলে SQLite নিজেই ডিলিট হওয়া পেজগুলোকে ট্র্যাক করে এবং ফাঁকা জায়গাগুলো ডাটাবেস ফাইলের শেষে সরিয়ে নেয়, যাতে সময়ের সাথে ফাইল আকার বাড়তে না পারে। এটি ম্যানুয়াল VACUUM-এর চেয়ে আলাদা: auto_vacuum ফাঁকা পেজগুলোকে শেষে সরায় (ফলে ফাইল ছোট হয়) কিন্তু পুরো ডিফ্র্যাগমেন্টেশন করে না; ম্যানুয়াল VACUUM পুরো ডাটাবেসকে নতুন করে সাজায়।

PRAGMA মান:

  • NONE (0): auto_vacuum বন্ধ (ডিফল্ট)।
  • FULL (1): সম্পূর্ণ auto_vacuum চালু; প্রতিবার ডিলিট হলে ফাঁকা পেজ ফাইলের শেষে চলে যায়।
  • INCREMENTAL (2): auto_vacuum চালু, কিন্তু ফাঁকা পেজগুলি incremental_vacuum PRAGMA দিয়ে ম্যানুয়ালি সরাতে হবে, স্বয়ংক্রিয়ভাবে নয়।

সেটিং:

sql

PRAGMA auto_vacuum = FULL;   -- চালু
PRAGMA auto_vacuum = NONE;   -- বন্ধ
PRAGMA auto_vacuum = INCREMENTAL; -- ইনক্রিমেন্টাল

বর্তমান সেটিং দেখা:

sql

PRAGMA auto_vacuum;

অথবা কমান্ড লাইন থেকে:

bash

sqlite3 database_name "PRAGMA auto_vacuum;"

গুরুত্বপূর্ণ: auto_vacuum সেটিং পরিবর্তন করলে তা নতুন করে VACUUM না চালানো পর্যন্ত কার্যকর হয় না। অর্থাৎ, সেট করার পরপরই VACUUM কমান্ড দিতে হবে যাতে পরিবর্তন স্থায়ী হয়।

কখন কোনটি ব্যবহার করবেন?

  • যদি আপনার ডাটাবেসে ঘন ঘন ডিলিট হয় এবং ফাইলের আকার বেড়ে যাওয়া সমস্যা, তাহলে auto_vacuum = FULL সেট করে দিন এবং একটি প্রাথমিক VACUUM চালান। তবে এতে ইনসার্ট/ডিলিট কিছুটা ধীর হতে পারে।
  • INCREMENTAL বেছে নিলে আপনি নিজে কন্ট্রোল করে PRAGMA incremental_vacuum দিয়ে ধাপে ধাপে স্পেস রিক্লেইম করতে পারেন।
  • যদি ফাইলের আকার নিয়ে বিশেষ চিন্তা না থাকে এবং সর্বোচ্চ পারফরম্যান্স চান, তাহলে auto_vacuum বন্ধ রাখাই ভালো, মাঝে মাঝে ম্যানুয়াল VACUUM করবেন।

৪. ডিরেক্টরি স্ট্রাকচার ও ফাইলের আকার

ডাটাবেস ফাইল: vacuum_demo.db। VACUUM চালানোর সময় একটি অস্থায়ী টেম্প ফাইল তৈরি হতে পারে (যেমন vacuum_demo.db-vacuum), কিন্তু শেষে তা মুছে মূল ফাইল রিপ্লেস করে।

text

project-folder/
└── vacuum_demo.db

কোনো অতিরিক্ত প্যাকেজ ইন্সটল করতে হবে না।


৫. গুরুত্বপূর্ণ টিপস

  • VACUUM চলাকালে ব্যাকআপ: যেহেতু VACUUM পুরো ডাটাবেস পুনর্লিখন করে, এটি বড় ডাটাবেসে সময়সাপেক্ষ। ভুলক্রমে বাধা পেলে ডাটাবেস নষ্ট হতে পারে, তাই আগে .backup নিয়ে নিন।
  • সক্রিয় ট্রানজ্যাকশন এড়ান: VACUUM চালানোর আগে নিশ্চিত হন যে কোনো অসমাপ্ত ট্রানজ্যাকশন নেই; BEGIN করার পর VACUUM করলে এরর আসবে।
  • VACUUM-এর পর ROWID: INTEGER PRIMARY KEY না থাকলে VACUUM-এর ফলে ROWID পরিবর্তন হতে পারে, যা কিছু অ্যাপ্লিকেশনে সমস্যা সৃষ্টি করতে পারে।
  • ফাইল সিস্টেম: VACUUM-এর জন্য পর্যাপ্ত ডিস্ক স্পেস থাকা দরকার, কারণ একটি সম্পূর্ণ কপি তৈরি হয়।
  • পিরিয়ডিক VACUUM: বড় ডাটাবেসের ক্ষেত্রে নিয়মিত রক্ষণাবেক্ষণ হিসেবে VACUUM চালানো ভালো, তবে ব্যস্ত সময়ে নয়।
  • auto_vacuum = INCREMENTAL: এই সেটিং-এ ফাঁকা পেজগুলো PRAGMA incremental_vacuum(N) দিয়ে ধাপে ধাপে ফ্রি করা যায়, যা দীর্ঘমেয়াদী অপারেশনের জন্য সুবিধাজনক।

৬. সম্পূর্ণ অনুশীলন সেশন

sql

.headers on
.mode column

-- বর্তমান auto_vacuum সেটিং দেখি
PRAGMA auto_vacuum;

-- বর্তমান ডাটাবেস সাইজ (OS কমান্ড ব্যবহার করে, নিচে উদাহরণ)
-- .shell ls -l vacuum_demo.db  (লিনাক্স/ম্যাক)
-- .shell dir vacuum_demo.db    (উইন্ডোজ)

-- কিছু ডেটা ডিলিট করে ফ্রি স্পেস তৈরি করি
DELETE FROM COMPANY WHERE ID % 3 = 0;
-- ফাইল সাইজ অপরিবর্তিত থাকতে পারে।

-- ম্যানুয়াল VACUUM
VACUUM;
-- এখন আবার ফাইল সাইজ দেখুন, ছোট হয়েছে।

-- auto_vacuum = FULL সেট করি এবং VACUUM দিয়ে প্রয়োগ করি
PRAGMA auto_vacuum = FULL;
VACUUM;
PRAGMA auto_vacuum;   -- 1 (FULL)

-- কিছু ইনসার্ট ও ডিলিট করি; auto_vacuum কাজ করবে কিনা পর্যবেক্ষণ
INSERT INTO COMPANY VALUES (999, 'Test', 99, 'Nowhere', 0);
DELETE FROM COMPANY WHERE ID = 999;

-- আবার auto_vacuum বন্ধ করে দিতে চাইলে:
PRAGMA auto_vacuum = NONE;
VACUUM;

পরবর্তী পর্বে

আমরা শিখব SQLite Useful Functions – DATE, TIME, String, Math ইত্যাদি বিল্ট-ইন ফাংশনের ব্যবহার।

লেখকের কথা: VACUUM আপনার ডাটাবেসকে স্বাস্থ্যবান রাখে। বড় ডাটাবেসে একে নিয়মিত ব্যবহার করা ভালো। বাংলায় SQLite শেখার এই সিরিজের প্রতি আপনার আগ্রহ আমাদের স্পৃহা বাড়ায়। পোস্টটি ভালো লাগলে শেয়ার করুন, এবং সম্পূর্ণ সিরিজের আপডেট পেতে ToLearnTeam.com সাবস্ক্রাইব করুন। কোনো জিজ্ঞাসা থাকলে কমেন্টে জানান – আমরা উত্তর দিতে প্রস্তুত!



SQLite Full Course

  1. SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
  2. SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
  3. SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
  4. SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
  5. SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
  6. SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
  7. SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
  8. SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
  9. SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
  10. SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
  11. SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
  12. SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
  13. SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
  14. SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
  15. SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
  16. SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  17. SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
  18. SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
  19. SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
  20. SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
  21. SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
  22. SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
  23. SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
  24. SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  25. SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
  26. SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
  27. SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
  28. SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
  29. SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
  30. SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
  31. SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
  32. SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
  33. SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
  34. SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
  35. SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
  36. SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
  37. SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
  38. SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
  39. SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
  40. SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
  41. SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
  42. SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
  43. SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  44. SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
  45. SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
  46. SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
  47. SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
  48. SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
  49. SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
  50. SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)

The post SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল) appeared first on To Learn Team.

]]>
SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা) https://tolearnteam.com/sqlite-truncate-table-bangla/ Sat, 08 Aug 2026 02:40:16 +0000 http://tolearnteam.com/?p=2213 যেসব ডাটাবেস ম্যানেজমেন্ট সিস্টেমে (যেমন MySQL, PostgreSQL) TRUNCATE TABLE কমান্ড ব্যবহার করে টেবিলের সমস্ত ডেটা দ্রুত মুছে ফেলা যায়, SQLite-তে এমন কোনো কমান্ড সরাসরি নেই। তবে চিন্তার কিছু নেই – SQLite আমাদের…

The post SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা) appeared first on To Learn Team.

]]>
যেসব ডাটাবেস ম্যানেজমেন্ট সিস্টেমে (যেমন 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

  1. SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
  2. SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
  3. SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
  4. SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
  5. SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
  6. SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
  7. SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
  8. SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
  9. SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
  10. SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
  11. SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
  12. SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
  13. SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
  14. SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
  15. SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
  16. SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  17. SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
  18. SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
  19. SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
  20. SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
  21. SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
  22. SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
  23. SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
  24. SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
  25. SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
  26. SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
  27. SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
  28. SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
  29. SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
  30. SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
  31. SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
  32. SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
  33. SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
  34. SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
  35. SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
  36. SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
  37. SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
  38. SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
  39. SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
  40. SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
  41. SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
  42. SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
  43. SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
  44. SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
  45. SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
  46. SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
  47. SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
  48. SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
  49. SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
  50. SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)

The post SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা) appeared first on To Learn Team.

]]>