টেবিলের অপ্রয়োজনীয় বা ভুল রেকর্ড সরিয়ে ফেলার জন্য SQLite-তে DELETE স্টেটমেন্ট ব্যবহার করা হয়। এটি DML (Data Manipulation Language) কমান্ড। UPDATE-এর মতোই, এখানেও WHERE ক্লজ ব্যবহার করে নির্দিষ্ট সারি চিহ্নিত করা হয়। যদি WHERE ব্যবহার না করা হয়, তাহলে টেবিলের সকল রেকর্ড মুছে যাবে, কিন্তু টেবিলের গঠন (schema) অক্ষত থাকবে। এটি DROP TABLE থেকে ভিন্ন – DROP টেবিলসহ পুরো গঠনই সরিয়ে দেয়, DELETE শুধু ডেটা সরায়। আজকের পর্বে আমরা DELETE-এর সঠিক ব্যবহার, সতর্কতা ও বাস্তব উদাহরণ শিখব।
পূর্বপ্রস্তুতি
- SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
company.dbডাটাবেসেCOMPANYটেবিল। না থাকলে নিচের ধাপে তৈরি করুন:
bash
sqlite3 company.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।
১. DELETE-এর সিনট্যাক্স
মৌলিক গঠন:
sql
DELETE FROM table_name WHERE condition;
- table_name – যে টেবিল থেকে রেকর্ড মুছবেন।
- WHERE condition – ঐচ্ছিক কিন্তু অত্যন্ত গুরুত্বপূর্ণ। এই শর্তে নির্দিষ্ট সারি(গুলো) মুছে যাবে।
যদি WHERE না দেন: টেবিলের সব রেকর্ড ডিলিট হবে, টেবিল ফাঁকা (empty) হয়ে যাবে।
২. নির্দিষ্ট রেকর্ড ডিলিট করা (WHERE সহ)
উদাহরণ ১: ID 7 (James) কে মুছে ফেলা।
sql
DELETE FROM COMPANY WHERE ID = 7;
এখন পুরো টেবিল দেখলে:
sql
SELECT * FROM COMPANY;
ফলাফল:
text
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0
James (ID 7) আর নেই।
উদাহরণ ২: AND/OR দিয়ে একাধিক শর্তে ডিলিট।
sql
DELETE FROM COMPANY WHERE AGE < 25 AND SALARY <= 20000;
এটি Kim (AGE 22, SALARY 45000) ডিলিট করবে না, কিন্তু Teddy (23, 20000) ডিলিট হবে। পরীক্ষা করে দেখুন।
উদাহরণ ৩: IN ব্যবহার করে একাধিক ID ডিলিট।
sql
DELETE FROM COMPANY WHERE ID IN (2, 4);
এক কমান্ডে Allen ও Mark ডিলিট হবে।
৩. সব রেকর্ড ডিলিট (WHERE ছাড়া)
এটি অত্যন্ত সতর্কতার সাথে ব্যবহার করুন। কমান্ড:
sql
DELETE FROM COMPANY;
এটি COMPANY টেবিলের সমস্ত সারি মুছে ফেলবে, কিন্তু টেবিলের গঠন (CREATE TABLE স্ট্রাকচার) থেকে যাবে। টেবিলটি আবার নতুন রেকর্ড ইনসার্টের জন্য প্রস্তুত।
পার্থক্য DROP TABLE: DROP TABLE COMPANY; করলে টেবিলের অস্তিত্বই শেষ। তারপর আবার CREATE করতে হবে। DELETE করলে টেবিল থাকে, শুধু খালি হয়।
ব্যবহারিক পরীক্ষা:
sql
SELECT COUNT(*) FROM COMPANY; -- 7 (অথবা যাই ছিল) DELETE FROM COMPANY; SELECT COUNT(*) FROM COMPANY; -- 0
৪. DELETE এবং ট্রানজ্যাকশন
ভুলবশত সমস্ত ডেটা ডিলিট এড়াতে আপনি ট্রানজ্যাকশনের ভেতর DELETE চালাতে পারেন:
sql
BEGIN; DELETE FROM COMPANY WHERE AGE > 100; -- উদাহরণ, এমন কেউ নেই -- যদি ভুলও করি, সাথে সাথে ROLLBACK ROLLBACK;
তাহলে ডেটা অক্ষত থাকবে। নিশ্চিত হলে COMMIT করুন।
৫. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
আমাদের পুরো কাজ জুড়ে শুধুমাত্র company.db ফাইলটি ব্যবহৃত হচ্ছে। DELETE কোনো অতিরিক্ত ফাইল তৈরি করে না। তবে ডিলিট করার পর ডাটাবেস ফাইল আকার ছোট নাও হতে পারে; খালি জায়গা রিক্লেইম করতে VACUUM কমান্ড প্রয়োজন (পরে আলোচিত হবে)।
কোনো বিশেষ প্যাকেজ ইন্সটল করতে হবে না।
৬. গুরুত্বপূর্ণ টিপস ও সতর্কতা
- সর্বদা WHERE ব্যবহার করুন, যতক্ষণ না পুরো টেবিল খালি করাই লক্ষ্য।
- ডিলিটের আগে SELECT করে নিন – একই WHERE শর্ত দিয়ে
SELECT * FROM COMPANY WHERE ...চালিয়ে দেখুন কোন রেকর্ডগুলো ডিলিট হবে। - ব্যাকআপ নিন – গুরুত্বপূর্ণ ডাটাবেসে
.backupবা.dumpদিয়ে কপি রেখে তারপর DELETE করুন। - ফরেন কি সম্পর্ক: যদি অন্য টেবিল থেকে এই টেবিলের প্রাইমারি কি ব্যবহৃত হয়, তাহলে ডিলিট করলে সম্পর্কিত রেকর্ডও নষ্ট হতে পারে অথবা অরফান রেকর্ড তৈরি হবে। তখন CASCADE ইত্যাদি ব্যবহার করা লাগে (পরে আলোচিত হবে)।
- LIMIT: SQLite 3.35+ ভার্সনে
DELETE FROM table WHERE condition LIMIT nসমর্থিত, যা নির্দিষ্ট সংখ্যক সারি ডিলিট করতে পারে। - সঠিক শর্ত না মানলে: WHERE-এ কলামের নাম ভুল বা এমন শর্ত দিন যার কোনো মিল নেই, তবে কিছুই ডিলিট হবে না – নিরাপদ।
৭. কমপ্লিট অনুশীলন সেশন
নিচের ধাপগুলো টার্মিনালে চালিয়ে দক্ষতা বাড়ান:
bash
sqlite3 company.db
sql
.headers on .mode column -- প্রাথমিক রেকর্ড দেখি SELECT * FROM COMPANY; -- নির্দিষ্ট ডিলিট DELETE FROM COMPANY WHERE NAME = 'Teddy'; -- শর্তযোগে ডিলিট DELETE FROM COMPANY WHERE AGE >= 27 AND SALARY > 80000; -- অবশিষ্ট দেখি SELECT * FROM COMPANY; -- পুরো টেবিল সাফ করার আগে ব্যাকআপ নিই .backup company_backup.db DELETE FROM COMPANY; SELECT * FROM COMPANY; -- ফাঁকা -- ব্যাকআপ থেকে ফিরিয়ে আনা (পরের পর্বের জন্য রেখে দিচ্ছি) .restore company_backup.db
পরবর্তী পর্বে
আমরা SQLite-তে SELECT এর সাথে LIKE, GLOB, LIMIT, ORDER BY ক্লজের বিস্তারিত ব্যবহার শিখব।
লেখকের কথা: DELETE কমান্ড সহজ কিন্তু বিপজ্জনক। সতর্কতা অবলম্বন করলে আপনার ডেটা নিরাপদ থাকবে। বাংলায় এই টিউটোরিয়াল সিরিজ চলমান রাখতে আপনাদের উৎসাহই বড় শক্তি। পোস্টটি ভালো লাগলে শেয়ার করুন, এবং সব পর্বের আপডেট পেতে 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
