ডাটাবেসের প্রাণ হলো টেবিল – যেখানে সারি (row) ও কলামে (column) ডেটা সাজানো থাকে। SQLite-তে একটি নতুন টেবিল তৈরি করতে আমরা CREATE TABLE স্টেটমেন্ট ব্যবহার করি। এই কমান্ডের মাধ্যমে আমরা টেবিলের নাম, প্রতিটি কলামের নাম ও ডেটা টাইপ এবং বিভিন্ন কনস্ট্রেইন্ট (যেমন প্রাইমারি কি, NOT NULL) নির্ধারণ করি। আজকের পর্বে আমরা এই পুরো প্রক্রিয়াটি খুব সহজ ভাষায় উদাহরণসহ শিখব। আপনি শিখবেন কীভাবে একটি শক্তিশালী টেবিল তৈরি করতে হয় যা ডাটাবেসের বুনিয়াদ হিসেবে কাজ করে।
পূর্বপ্রস্তুতি
- আপনার কম্পিউটারে SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
- টার্মিনাল বা কমান্ড প্রম্পট ব্যবহার করতে পারবেন।
- কোনো অতিরিক্ত প্যাকেজ বা লাইব্রেরির প্রয়োজন নেই।
১. CREATE TABLE-এর সাধারণ সিনট্যাক্স
SQLite-তে টেবিল তৈরির মৌলিক গঠন হলো:
sql
CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns), column2 datatype, column3 datatype, ..... columnN datatype );
ব্যাখ্যা:
CREATE TABLE: এটি কীওয়ার্ড, যা ডাটাবেস ইঞ্জিনকে নতুন টেবিল তৈরির নির্দেশ দেয়।database_name.table_name: ঐচ্ছিকভাবে আপনি ডাটাবেসের নাম উল্লেখ করতে পারেন। যদিdatabase_nameনা দেন, তাহলে বর্তমানে ব্যবহৃত মূল ডাটাবেসে (main) টেবিল তৈরি হবে। সংযুক্ত (attached) ডাটাবেসে টেবিল তৈরি করতে চাইলেdatabase_name.প্রিফিক্স ব্যবহার করুন।column1 datatype: কমপক্ষে একটি কলামের নাম ও তার ডেটা টাইপ নির্ধারণ করতে হবে। ডেটা টাইপ হিসেবে আমরাINT,INTEGER,REAL,TEXT,CHAR(n),BLOBইত্যাদি দিতে পারি – SQLite এগুলোকে তার অ্যাফিনিটি অনুযায়ী ব্যাখ্যা করে (আগের ডেটা টাইপ পর্ব দেখুন)।PRIMARY KEY(one or more columns): ঐচ্ছিক। টেবিলের প্রতিটি সারিকে অনন্যভাবে চিহ্নিত করার জন্য এক বা একাধিক কলামকে প্রাইমারি কি হিসেবে ঘোষণা করা যায়। সাধারণত একটি কলাম (যেমনid) প্রাইমারি কি হয়।- কনস্ট্রেইন্ট:
NOT NULL(মান খালি রাখা যাবে না),UNIQUE(সব মান অনন্য),DEFAULT(ডিফল্ট মান) ইত্যাদি কলামের সাথে যোগ করা যায়।
২. উদাহরণ ১: COMPANY টেবিল তৈরি
ধরুন আমরা একটি কোম্পানির কর্মচারী তালিকা রাখতে একটি টেবিল বানাব। টেবিলের নাম COMPANY এবং এতে থাকবে:
- আইডি (ID) – পূর্ণসংখ্যা, প্রাইমারি কি, খালি রাখা যাবে না।
- নাম (NAME) – টেক্সট, খালি নয়।
- বয়স (AGE) – পূর্ণসংখ্যা, খালি নয়।
- ঠিকানা (ADDRESS) – ক্যারেক্টার, সর্বোচ্চ ৫০ অক্ষর (এখানে আসলে SQLite TEXT হিসেবেই নেবে)।
- বেতন (SALARY) – রিয়েল (দশমিক), খালি রাখা যেতে পারে।
কমান্ড:
sql
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
লক্ষ্য করুন:
ID INT PRIMARY KEY NOT NULL– আমরা এক লাইনেই কলামকে প্রাইমারি কি ও NOT NULL করেছি। এটি খুবই সাধারণ পদ্ধতি। চাইলে শেষে আলাদা করেPRIMARY KEY(ID)লেখাও যায়।ADDRESS CHAR(50)– SQLite-তেCHAR(50)-ও TEXT অ্যাফিনিটি পাবে, অর্থাৎ এটি টেক্সটের মতোই আচরণ করবে কিন্তু আমরা আকারের ইঙ্গিত দিচ্ছি।SALARY REAL– বেতনের জন্য দশমিক সংখ্যা; এখানে কোনো NOT NULL কনস্ট্রেইন্ট দেওয়া হয়নি, তাই ডেটা না থাকলে NULL সংরক্ষিত হবে।
৩. উদাহরণ ২: DEPARTMENT টেবিল তৈরি
এবার কোম্পানির বিভাগ (department) সংক্রান্ত আরেকটি টেবিল বানাই, যা পরবর্তী অনুশীলনে কাজে লাগবে।
sql
CREATE TABLE DEPARTMENT( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT NOT NULL );
এখানে EMP_ID দিয়ে আমরা বুঝব কোন কর্মচারী কোন বিভাগে আছে (পরে বিদেশি কি বা জয়েনের জন্য)।
৪. টেবিল তৈরি সফল হয়েছে কিনা যাচাই
SQLite শেলে টেবিল তৈরি করার পর আমরা ডট কমান্ড ব্যবহার করে যাচাই করতে পারি।
.tables কমান্ড: বর্তমান ডাটাবেসের (এবং সংযুক্ত ডাটাবেসগুলোর) সব টেবিলের নাম দেখায়।
sql
sqlite> .tables COMPANY DEPARTMENT
আপনি যদি আগে থেকে অন্য কোনো টেবিল তৈরি করে থাকেন, সেগুলোও দেখাবে। যদি ডাটাবেস সংযুক্ত (ATTACH) করে থাকেন, তাহলে অ্যালিয়াস প্রিফিক্সসহ (যেমন mydb.COMPANY) দেখতে পাবেন।
.schema TABLE_NAME কমান্ড: নির্দিষ্ট টেবিলের CREATE স্টেটমেন্টটি আবার দেখার জন্য।
sql
sqlite> .schema COMPANY CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
এটি নিশ্চিত করে যে টেবিলটি আমাদের কাঙ্খিত গঠনেই তৈরি হয়েছে। .schema কমান্ড ছাড়া কলামের তালিকা একবারে দেখা যায় না, তবে আমরা PRAGMA table_info('COMPANY'); ব্যবহার করেও কলামের বিস্তারিত তথ্য পেতে পারি (আগামী পর্বগুলোতে আলোচিত হবে)।
৫. ডাটাবেসের নাম সহ টেবিল তৈরি (ঐচ্ছিক)
আপনি যদি চান যে test নামে সংযুক্ত কোনো ডাটাবেসে টেবিল তৈরি হবে, তাহলে সিনট্যাক্স হবে:
sql
ATTACH DATABASE 'other.db' AS other;
CREATE TABLE other.products (
id INTEGER PRIMARY KEY,
name TEXT
);
এখন .tables চালালে other.products দেখাবে।
কিন্তু আপনি যদি সরাসরি main ডাটাবেসে টেবিল তৈরি করতে চান, তাহলে শুধু টেবিলের নাম লিখলেই হবে, main. দেওয়ার প্রয়োজন নেই (তবে দিলেও চলবে)।
৬. বাস্তব হাতে-কলমে উদাহরণ
আসুন আমরা একটি নতুন ডাটাবেস practice.db খুলে উপরের টেবিল দুটি তৈরি করি এবং যাচাই করি।
ধাপ ১: টার্মিনালে
bash
sqlite3 practice.db
ধাপ ২: টেবিল তৈরি
sql
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); CREATE TABLE DEPARTMENT( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT NOT NULL );
ধাপ ৩: টেবিলের তালিকা দেখি
sql
.tables
আউটপুট:
text
COMPANY DEPARTMENT
ধাপ ৪: COMPANY টেবিলের স্কিমা দেখি
sql
.schema COMPANY
আমরা আগের মতোই CREATE স্টেটমেন্ট দেখতে পাব।
ধাপ ৫: কিছু ডেটা ইনসার্ট করে দেখি টেবিল কাজ করে কিনা
sql
INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00); INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000.00);
sql
SELECT * FROM COMPANY;
ফলাফল আসবে। অর্থাৎ টেবিল সঠিকভাবে তৈরি হয়েছে এবং কাজ করছে।
৭. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
উপরের কাজ করার পর আপনার ফোল্ডারে শুধু practice.db ফাইলটি থাকবে। যদি আপনি আলাদা ডাটাবেস ফাইল সংযুক্ত করেন, তবে সেগুলোও ফোল্ডারে থাকবে। উদাহরণস্বরূপ:
text
project-folder/ └── practice.db
কোনো বিশেষ প্যাকেজ বা অতিরিক্ত কনফিগারেশনের দরকার নেই। SQLite ইন্সটল করা থাকলেই আপনি CREATE TABLE সহ যেকোনো SQL কমান্ড চালাতে পারবেন।
৮. গুরুত্বপূর্ণ টিপস ও কৌশল
- প্রাইমারি কি নকশা: সাধারণত একটি টেবিলে একটিই প্রাইমারি কি থাকে (যেমন
ID), এবং এটিINTEGER PRIMARY KEYহিসেবে ডিফাইন করলে SQLite স্বয়ংক্রিয়ভাবেAUTOINCREMENT-এর মতো আচরণ করে (যদিওAUTOINCREMENTআলাদা কীওয়ার্ড পরে আলোচনা করব)। - NOT NULL: যে কলামগুলোতে ডেটা থাকা আবশ্যক, সেখানে অবশ্যই
NOT NULLদিন। এটি ডেটা ইন্টিগ্রিটি রক্ষা করে। - কনস্ট্রেইন্টের ক্রম: কলাম ডেফিনিশনের পর যে কোনো কনস্ট্রেইন্ট (
PRIMARY KEY,NOT NULL,UNIQUE,CHECK,DEFAULT) বসাতে পারেন। - প্রত্যেক কলাম আলাদা লাইনে: কোড পড়ার সুবিধার্থে প্রতিটি কলাম আলাদা লাইনে লেখা ভালো অভ্যাস।
- বড় হাতের অক্ষর: SQL কীওয়ার্ডগুলো বড় হাতের অক্ষরে লেখা সাধারণ রীতি, যদিও SQLite কেস-ইনসেনসিটিভ।
- টেবিলের নামকরণ: টেবিলের নাম অর্থবহ এবং ইংরেজি একবচন বা বহুবচন – প্রকল্পের নিয়ম অনুযায়ী ঠিক করুন।
পরবর্তী পর্বে
আমরা শিখব SQLite-তে ডেটা ইনসার্ট (INSERT INTO) – কীভাবে এক বা একাধিক সারি টেবিলে যোগ করতে হয়, বিভিন্ন কৌশল ও ব্যবহারিক উদাহরণ।
লেখকের কথা: আমরা চেষ্টা করছি বাংলায় 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
