ডাটাবেসে তথ্য রাখার মূল কাজটি হয় ডেটা ইনসার্ট করার মাধ্যমে। SQLite-তে কোনো টেবিলে নতুন সারি (row) যোগ করতে আমরা INSERT INTO স্টেটমেন্ট ব্যবহার করি। এটি একটি DML (Data Manipulation Language) কমান্ড, যা টেবিলের কলামগুলোর মান নির্ধারণ করে একটি সম্পূর্ণ রেকর্ড তৈরি করে। আজকের পর্বে আমরা INSERT INTO-এর সম্পূর্ণ সিনট্যাক্স, বিভিন্ন ব্যবহারিক পদ্ধতি, এবং আরেকটি টেবিল থেকে ডেটা এনে ইনসার্ট করার কৌশল উদাহরণসহ শিখব।
পূর্বপ্রস্তুতি
- আপনার সিস্টেমে SQLite ইন্সটল করা থাকতে হবে (তৃতীয় পর্ব দেখুন)।
- একটি ডাটাবেস ও টেবিল প্রস্তুত থাকা দরকার। আমরা উদাহরণের জন্য
COMPANYটেবিল ব্যবহার করব। যদি না থাকে, নিচের ধাপে তৈরি করে নেব। - কোনো অতিরিক্ত প্যাকেজ বা লাইব্রেরির দরকার নেই।
১. INSERT INTO-এর সিনট্যাক্স
SQLite-তে ডেটা ইনসার্ট করার দুটি প্রধান রূপ আছে:
পদ্ধতি ১: কলামের নাম উল্লেখ করে
sql
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
এখানে আপনি যে কলামগুলোতে মান দিতে চান, সেগুলোর নাম ও ক্রম অনুসারে ভ্যালু প্রদান করবেন। যে কলামগুলো বাদ দেবেন, সেগুলোতে স্বয়ংক্রিয়ভাবে ডিফল্ট মান (NULL বা উল্লিখিত ডিফল্ট) বসবে। তবে প্রাইমারি কি বা NOT NULL কলাম বাদ দিলে এরর হতে পারে।
পদ্ধতি ২: কলামের নাম ছাড়া (সব কলামের জন্য)
sql
INSERT INTO table_name VALUES (value1, value2, value3, ...);
এই ক্ষেত্রে আপনাকে টেবিলের সবগুলো কলামের মান দিতে হবে, ঠিক যে ক্রমে কলামগুলো তৈরি করা হয়েছে সেই ক্রমে। কোনো কলাম বাদ দেওয়া যাবে না।
২. ব্যবহারিক উদাহরণ – COMPANY টেবিলে রেকর্ড যোগ
আমরা একটি নতুন ডাটাবেস 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 );
এখানে ID প্রাইমারি কি এবং NOT NULL। অন্যান্য কলামের কনস্ট্রেইন্ট পূর্বের ন্যায়।
ধাপ ২: কলামের নাম উল্লেখ করে ইনসার্ট
sql
INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00); INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00); INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00); INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00); INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (5, 'David', 27, 'Texas', 85000.00); INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (6, 'Kim', 22, 'South-Hall', 45000.00);
প্রতিটি স্টেটমেন্ট শেষে সেমিকোলন (;) দিতে হবে। সফল ইনসার্টের পর SQLite কোনো নিশ্চিতকরণ মেসেজ দেয় না, শুধু প্রম্পট আসে।
ধাপ ৩: কলামের নাম ছাড়া ইনসার্ট
এখন সপ্তম রেকর্ডটি কলাম উল্লেখ না করে ইনসার্ট করি:
sql
INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00);
এখানে মানগুলো ঠিক টেবিলের কলাম ক্রমে (ID, NAME, AGE, ADDRESS, SALARY) দিতে হবে।
ধাপ ৪: ডেটা যাচাই করা
বর্তমানে আমরা SELECT কমান্ড এখনো বিস্তারিত শিখিনি, কিন্তু একটি সহজ কোয়েরি দিয়ে ডেটা দেখে নেওয়া যাক:
sql
SELECT * FROM COMPANY;
আউটপুট হবে নিম্নরূপ (.header on ও .mode column চালু করলে সুন্দর দেখাবে):
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 7 James 24 Houston 10000.0
এর মাধ্যমে নিশ্চিত হওয়া গেল যে ৭টি রেকর্ড সফলভাবে ইনসার্ট হয়েছে।
৩. একটি টেবিল থেকে আরেক টেবিলে ডেটা পপুলেট করা (INSERT INTO … SELECT)
SQLite-তে আপনি একটি টেবিলের ডেটা থেকে নির্বাচিত কলাম বা সারি নিয়ে আরেকটি টেবিলে ইনসার্ট করতে পারেন। সিনট্যাক্স:
sql
INSERT INTO first_table (col1, col2, ...) SELECT colA, colB, ... FROM second_table WHERE condition;
এটি তখনই কাজ করবে যখন first_table-এর কলাম সংখ্যা ও ডেটা টাইপ SELECT-এর আউটপুটের সাথে সামঞ্জস্যপূর্ণ হয়।
উদাহরণ: ধরা যাক, আমরা COMPANY টেবিল থেকে ৩০-এর কম বয়সী কর্মীদের একটি নতুন টেবিল YOUNG_EMPLOYEES-এ স্থানান্তর করতে চাই। প্রথমে খালি টেবিল তৈরি করি:
sql
CREATE TABLE YOUNG_EMPLOYEES ( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
এখন ইনসার্ট উইথ সিলেক্ট:
sql
INSERT INTO YOUNG_EMPLOYEES (ID, NAME, AGE, ADDRESS, SALARY) SELECT ID, NAME, AGE, ADDRESS, SALARY FROM COMPANY WHERE AGE < 30;
চেক করলে দেখা যাবে কেবল Teddy (23), Mark (25), David (27), Kim (22), James (24) – এই পাঁচজন নতুন টেবিলে এসেছে। (আমাদের ডেটায় Paul ও Allen এর বয়স ৩০+)
গুরুত্বপূর্ণ: এই বৈশিষ্ট্যটি তখনই বুঝতে পারবেন যখন আমরা SELECT ও WHERE ক্লজ সম্পর্কে ভালোভাবে জানব। পরবর্তী পর্বে আমরা SELECT কভার করব, তাই আপাতত এটি একটি প্রিভিউ হিসেবে দেখুন।
৪. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
উপরের ধাপগুলো শেষে আপনার ফোল্ডারে একটি মাত্র ফাইল থাকবে:
text
project-folder/ └── company.db
এই ফাইলের ভেতরেই সব টেবিল ও ডেটা সংরক্ষিত। কোনো বাড়তি প্যাকেজ বা কনফিগারেশন প্রয়োজন নেই। SQLite কমান্ড-লাইন টুলই সব কাজ করছে।
৫. গুরুত্বপূর্ণ টিপস ও সতর্কতা
- সঠিক ক্রম: যখন কলামের নাম উল্লেখ না করে
INSERT INTO table_name VALUES (...)ব্যবহার করবেন, তখন অবশ্যই টেবিলের কলাম ক্রম জানা থাকতে হবে (.schemaদিয়ে দেখে নিন)। - NULL ও প্রাইমারি কি: যদি প্রাইমারি কি কলামে মান না দিতে চান, আর সেটি
INTEGER PRIMARY KEYহয়, তাহলেNULLপাস করলে SQLite স্বয়ংক্রিয়ভাবে একটি ইউনিক পূর্ণসংখ্যা বসাবে। যেমন:sqlINSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (NULL, ‘Rahim’, 30, ‘Dhaka’, 40000.0);এটিID-র জন্য আগের সর্বোচ্চ মানের চেয়ে এক বেশি মান ব্যবহার করবে (যদিINTEGER PRIMARY KEYহয়, যাrowid-এর অ্যালিয়াস)। - একাধিক সারি একসাথে ইনসার্ট: SQLite 3.33+ ভার্সনে আপনি একাধিক VALUES গ্রুপ লিখতে পারেন:sqlINSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (8, ‘Karim’, 29, ‘Chittagong’, 35000.0), (9, ‘Sonia’, 26, ‘Khulna’, 42000.0);এটি সময় বাঁচায়।
- ট্রানজ্যাকশন ব্যবহার: বড় সংখ্যক ইনসার্টের আগে
BEGIN;ও শেষেCOMMIT;করলে কার্যকারিতা বাড়ে এবং ডেটা ইন্টিগ্রিটি বজায় থাকে। - ডুপ্লিকেট প্রাইমারি কি: যদি একই প্রাইমারি কি মান দিয়ে আবার ইনসার্ট করার চেষ্টা করেন, তাহলে
UNIQUE constraint failedএরর আসবে। কারণID-র মান অনন্য হতে হবে।
পরবর্তী পর্বে
আমরা শিখব SQLite SELECT স্টেটমেন্ট – কীভাবে টেবিল থেকে ডেটা খুঁজে বের করা, নির্দিষ্ট কলাম নির্বাচন, WHERE, ORDER BY ইত্যাদি।
লেখকের কথা: পুরো টিউটোরিয়াল সিরিজটি আমরা সর্বশেষ SQLite 3.51.1 ভার্সনের সাথে সামঞ্জস্য রেখে তৈরি করছি। বাংলায় প্রযুক্তি শেখার এই যাত্রায় আপনাদের উৎসাহ আমাদের বড় অনুপ্রেরণা। পোস্টটি ভালো লাগলে বন্ধুদের সাথে শেয়ার করুন, এবং সিরিজের সব আপডেট পেতে 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
