SQLite একটি স্বয়ংসম্পূর্ণ, সার্ভারবিহীন, জিরো-কনফিগারেশন, ট্রানজ্যাকশনাল SQL ডাটাবেস ইঞ্জিন। এটি বিশ্বের সবচেয়ে বেশি ব্যবহৃত ডাটাবেস, মোবাইল অ্যাপ, এমবেডেড সিস্টেম ও ডেস্কটপ সফটওয়্যারে জনপ্রিয়। সম্পূর্ণ ডাটাবেস একটি মাত্র ফাইলে সংরক্ষিত হয়, যা সহজে কপি ও স্থানান্তরযোগ্য। এই গাইড SQLite-এর প্রাথমিক থেকে অ্যাডভান্সড সব বিষয় সংক্ষেপে ধারণ করে।
১. ইন্সটলেশন
- উইন্ডোজ: sqlite.org/download.html থেকে
sqlite-tools-win-x64-*.zipডাউনলোড করুন, আনজিপ করেC:\sqliteফোল্ডারে রাখুন এবং PATH এ যুক্ত করুন। কমান্ড প্রম্পটেsqlite3লিখুন। - ম্যাক (Homebrew):
brew install sqlite3 - লিনাক্স:
sudo apt install sqlite3(ডেবিয়ান/উবুন্টু) অথবাsudo dnf install sqlite(ফেডোরা)।
ইন্সটল যাচাই: sqlite3 --version
২. ডট কমান্ড (Shell-এ বিশেষ কমান্ড)
SQLite শেলে ডট কমান্ড . দিয়ে শুরু হয় এবং সেমিকোলন ছাড়া চলে।
| কমান্ড | কাজ |
|---|---|
.help | সব ডট কমান্ডের তালিকা |
.databases | সংযুক্ত ডাটাবেসের তালিকা |
.tables | টেবিলের তালিকা |
.schema TABLE | টেবিলের CREATE স্টেটমেন্ট |
.dump | সম্পূর্ণ ডাটাবেস SQL আকারে এক্সপোর্ট |
.mode column / .headers on | কলাম মোড ও হেডার চালু |
.quit / .exit | শেল থেকে বের হওয়া |
আউটপুট ফরম্যাট: .mode csv, .mode html, .mode insert, .mode line, .mode list, .mode tabs, .mode column
৩. SQL সিনট্যাক্স বেসিক
- কেস ইনসেনসিটিভ:
SELECTওselectএকই। - কমেন্ট:
-- single lineঅথবা/* multi line */ - স্টেটমেন্ট শেষে সেমিকোলন:
;বাধ্যতামূলক।
৪. ডেটা টাইপ ও স্টোরেজ ক্লাস
SQLite-র ৫টি স্টোরেজ ক্লাস: NULL, INTEGER, REAL, TEXT, BLOB।
টাইপ অ্যাফিনিটি: TEXT, NUMERIC, INTEGER, REAL, NONE।
সাধারণ ডেটা টাইপ নাম: INT, INTEGER, TEXT, REAL, BLOB, BOOLEAN (আসলে INTEGER 0/1)।
sql
CREATE TABLE demo ( id INTEGER PRIMARY KEY, name TEXT, price REAL, photo BLOB, is_active BOOLEAN DEFAULT 1 );
৫. ডাটাবেস তৈরি ও খোলা
bash
sqlite3 mydb.db
ডাটাবেস তৈরি ও খোলে। ফাইল না থাকলে অটো-ক্রিয়েট হয়।ATTACH DATABASE 'other.db' AS other; দিয়ে একাধিক ডাটাবেস সংযুক্ত করা যায়।DETACH DATABASE other; দিয়ে বিচ্ছিন্ন।
৬. টেবিল তৈরি (CREATE TABLE)
sql
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
roll INTEGER UNIQUE,
marks REAL DEFAULT 0.0
);
PRIMARY KEYইউনিক ও নট-নাল নিশ্চিত করে (INTEGER PRIMARY KEY হলে rowid-এর অ্যালিয়াস)।AUTOINCREMENTশুধুমাত্র INTEGER PRIMARY KEY-তে।
টেবিল পরিবর্তন:
ALTER TABLE students RENAME TO learners;(নাম বদল)ALTER TABLE students ADD COLUMN email TEXT;(নতুন কলাম যোগ)
কনস্ট্রেইন্ট: NOT NULL, DEFAULT, UNIQUE, CHECK, PRIMARY KEY, FOREIGN KEY (ফরেন কি পরে)।
sql
CREATE TABLE employee (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER CHECK(age >= 18),
salary REAL DEFAULT 50000
);
৭. ডেটা ইনসার্ট (INSERT)
sql
INSERT INTO students (name, roll, marks) VALUES ('রহিম', 101, 85.5);
-- অথবা কলাম ছাড়া (সব কলামের জন্য):
INSERT INTO students VALUES (NULL, 'করিম', 102, 92.0);
-- একাধিক:
INSERT INTO students (name, roll, marks) VALUES
('সুমন', 103, 78.25),
('জামাল', 104, 88.0);
৮. ডেটা অনুসন্ধান (SELECT)
সমস্ত কলাম: SELECT * FROM students;
নির্দিষ্ট কলাম: SELECT name, marks FROM students;
শর্ত: WHERE marks > 80
প্যাটার্ন: WHERE name LIKE 'ক%' (% যেকোনো অক্ষর, _ এক অক্ষর)
কেস-সেনসিটিভ GLOB: WHERE name GLOB 'K*' (* যেকোনো, ? এক অক্ষর)
রেঞ্জ: WHERE marks BETWEEN 70 AND 90
তালিকা: WHERE roll IN (101, 102, 103)
NULL চেক: WHERE address IS NULL
একাধিক শর্ত: AND, OR, NOT
সর্টিং: ORDER BY marks DESC (ASC ডিফল্ট)
সীমা: LIMIT 5 OFFSET 2 (তৃতীয় সারি থেকে ৫টি রেকর্ড)
ডুপ্লিকেট বাদ: SELECT DISTINCT city FROM students;
গ্রুপিং ও অ্যাগ্রিগেট:
sql
SELECT city, COUNT(*), AVG(marks) FROM students GROUP BY city HAVING COUNT(*) > 2;
COUNT,SUM,AVG,MAX,MINব্যবহার করুন।GROUP BY-র পরে ফিল্টারHAVING।
৯. ডেটা আপডেট (UPDATE)
sql
UPDATE students SET marks = 90.5 WHERE roll = 101; UPDATE students SET marks = marks + 5 WHERE city = 'ঢাকা';
সতর্কতা: WHERE ছাড়া সব সারি আপডেট হবে।
১০. ডেটা ডিলিট (DELETE)
sql
DELETE FROM students WHERE roll = 104; DELETE FROM students; -- সম্পূর্ণ টেবিল খালি করবে!
পুরো টেবিল দ্রুত খালি করতে: DROP TABLE students; ও পুনরায় তৈরি, বা VACUUM পরে ডিলিট।
১১. জয়েন (JOIN)
ধরা যাক দুটি টেবিল: students(id, name) ও results(student_id, subject, marks)।
- INNER JOIN: মিল পাওয়া সারি।sqlSELECT s.name, r.subject, r.marks FROM students s INNER JOIN results r ON s.id = r.student_id;
- LEFT JOIN: বাম টেবিলের সব সারি + মিল না থাকলে ডানের কলামে NULL।sqlSELECT * FROM students s LEFT JOIN results r ON s.id = r.student_id;
- CROSS JOIN: কার্তেসীয় গুণফল (সব কম্বিনেশন)।sqlSELECT * FROM students CROSS JOIN results;
১২. সাবকোয়েরি (Subquery)
sql
SELECT name FROM students WHERE id IN (SELECT student_id FROM results WHERE subject='গণিত'); -- স্কেলার: SELECT name FROM students WHERE marks = (SELECT MAX(marks) FROM students);
১৩. ইউনিয়ন (UNION)
দুটি SELECT-এর ফলাফল উল্লম্বভাবে জোড়া (ডুপ্লিকেট সরায়), UNION ALL সরায় না।
sql
SELECT name FROM students WHERE city = 'ঢাকা' UNION SELECT name FROM students WHERE marks > 80;
১৪. ট্রানজ্যাকশন
ডেটা ইন্টিগ্রিটি নিশ্চিত করতে।
sql
BEGIN; -- ট্রানজ্যাকশন শুরু UPDATE accounts SET balance = balance - 1000 WHERE id = 1; UPDATE accounts SET balance = balance + 1000 WHERE id = 2; COMMIT; -- বা ROLLBACK; (বাতিল করতে)
১৫. ইনডেক্স (Index)
অনুসন্ধানের গতি বাড়ায়।
sql
CREATE INDEX idx_name ON students (name); CREATE UNIQUE INDEX idx_roll ON students (roll); DROP INDEX idx_name;
- ইনডেক্স তালিকা:
.indices studentsবাPRAGMA index_list('students') EXPLAIN QUERY PLAN SELECT ...দিয়ে প্ল্যান দেখা যায়।
১৬. ভিউ (View)
ভার্চুয়াল টেবিল।
sql
CREATE VIEW top_students AS SELECT name, marks FROM students WHERE marks >= 80; SELECT * FROM top_students; DROP VIEW top_students;
ভিউ শুধুমাত্র পঠনযোগ্য।
১৭. ট্রিগার (Trigger)
স্বয়ংক্রিয় কাজ।
sql
CREATE TRIGGER log_insert AFTER INSERT ON students
BEGIN
INSERT INTO audit_log (action, time) VALUES ('INSERT', datetime('now'));
END;
-- DELETE, UPDATE-তেও।
DROP TRIGGER log_insert;
১৮. বিল্ট-ইন ফাংশন
গণনা: COUNT(*), AVG(col), SUM(col), MAX(col), MIN(col)
স্ট্রিং: UPPER(text), LOWER(text), LENGTH(text)
গাণিতিক: ABS(x), ROUND(x, d)
এলোমেলো: RANDOM() (বড় রেঞ্জ), ABS(RANDOM() % 100) (0-99)
তারিখ/সময়:
sql
SELECT date('now'); -- '2025-08-08'
SELECT time('now'); -- '14:30:05'
SELECT datetime('now'); -- '2025-08-08 14:30:05'
SELECT julianday('now'); -- জুলিয়ান ডে
SELECT strftime('%d/%m/%Y','now'); -- কাস্টম ফরম্যাট
- মডিফায়ার:
'+1 day','start of month','weekday 0'ইত্যাদি।
১৯. PRAGMA
ডাটাবেস সেটিংস ও মেটাডেটা।
sql
PRAGMA table_info('students'); -- কলামের তথ্য
PRAGMA index_list('students'); -- ইনডেক্স তালিকা
PRAGMA journal_mode = WAL; -- জার্নাল মোড (পারফরম্যান্স)
PRAGMA cache_size = 4000; -- ক্যাশ পেজ সংখ্যা
PRAGMA synchronous = NORMAL; -- সিঙ্ক মোড
PRAGMA auto_vacuum = FULL; VACUUM; -- অটো ভ্যাকুয়াম
PRAGMA user_version = 1; -- ব্যবহারকারী সংস্করণ
২০. AUTOINCREMENT বনাম INTEGER PRIMARY KEY
INTEGER PRIMARY KEY(AUTOINCREMENT ছাড়া) → ডিলিট করা rowid পুনরায় ব্যবহার হতে পারে।INTEGER PRIMARY KEY AUTOINCREMENT→ কখনো পুরনো মান রিইউজ হয় না,sqlite_sequenceটেবিলে রেকর্ড রাখে।
২১. VACUUM
ডাটাবেস ফাইল পুনর্গঠন করে অপ্রয়োজনীয় স্থান মুক্ত করে।
sql
VACUUM;
২২. ব্যাকআপ ও রিস্টোর
bash
sqlite3 mydb.db .dump > backup.sql # ডাম্প sqlite3 new.db < backup.sql # রিস্টোর
অথবা .backup main backup.db (SQLite শেলে)।
২৩. প্রোগ্রামিং ল্যাঙ্গুয়েজে SQLite
পাইথন
python
import sqlite3
conn = sqlite3.connect('mydb.db')
conn.execute("CREATE TABLE ...")
conn.execute("INSERT INTO ... VALUES (?, ?)", (val1, val2))
conn.commit()
conn.close()
জাভা (JDBC)
java
Connection conn = DriverManager.getConnection("jdbc:sqlite:mydb.db");
Statement stmt = conn.createStatement();
stmt.execute("CREATE TABLE ...");
ResultSet rs = stmt.executeQuery("SELECT * FROM ...");
conn.close();
(ড্রাইভার JAR: sqlite-jdbc-*.jar)
PHP
php
$db = new SQLite3('mydb.db');
$db->exec("CREATE TABLE ...");
$result = $db->query("SELECT * FROM ...");
while ($row = $result->fetchArray(SQLITE3_ASSOC)) { ... }
$db->close();
C/C++
c
sqlite3 *db;
sqlite3_open("mydb.db", &db);
sqlite3_exec(db, "CREATE TABLE ...", callback, 0, &errMsg);
sqlite3_close(db);
(লিঙ্ক: -lsqlite3)
২৪. SQL ইনজেকশন প্রতিরোধ
কখনোই সরাসরি ইউজার ইনপুট SQL-এ জুড়বেন না।
সবসময় প্যারামিটারাইজড কোয়েরি ব্যবহার করুন: পাইথনে ? বা :name, জাভায় PreparedStatement, পিএইচপিতে prepare ও bindValue।
python
# ভালো
cursor.execute("SELECT * FROM users WHERE name = ?", (user_input,))
২৫. গুরুত্বপূর্ণ টিপস
- ডাটাবেস ফাইলের ব্যাকআপ নিয়মিত নিন।
- বড় টেবিলে প্রয়োজনীয় কলামে ইনডেক্স তৈরি করুন।
EXPLAIN QUERY PLANদিয়ে অপ্টিমাইজ করুন।- অটো-কমিট বন্ধ করে বাল্ক অপারেশনে একত্রে কমিট করুন (
BEGIN; ... COMMIT;)। - VACUUM ও PRAGMA সেটিংস প্রয়োজনমতো ব্যবহার করুন।
- SQLite-র অফিসিয়াল সাইট sqlite.org থেকে সর্বশেষ সংস্করণ ও ডকুমেন্টেশন দেখুন।
এই গাইড 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
