SQLite ALTER TABLE কমান্ড দিয়ে টেবিল রিনেম ও নতুন কলাম যোগ করার বাংলা টিউটোরিয়াল
SQLite ALTER TABLE কমান্ড দিয়ে টেবিল রিনেম ও নতুন কলাম যোগ করার বাংলা টিউটোরিয়াল

SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)

ডাটাবেসের চাহিদা সময়ের সাথে পাল্টায়। অনেক সময় টেবিল তৈরি করার পর দেখা যায় তার নাম বদলানো দরকার, কিংবা একটি নতুন কলাম সংযুক্ত করতে হবে। SQLite-তে এই কাজটি করার জন্য ALTER TABLE কমান্ড ব্যবহৃত হয়। তবে গুরুত্বপূর্ণ বিষয় হলো, SQLite-র ALTER TABLE শুধুমাত্র দুটি কাজ সমর্থন করে: টেবিলের নাম পরিবর্তন (RENAME TO) এবং নতুন কলাম যোগ করা (ADD COLUMN)। কলাম মুছে ফেলা, কলামের ডেটা টাইপ পরিবর্তন, বা কনস্ট্রেইন্ট যোগ/মুছার কোনো সরাসরি সুবিধা নেই। এই পর্বে আমরা ALTER TABLE-এর সম্পূর্ণ ব্যবহার, সীমাবদ্ধতা ও বিকল্প উপায় উদাহরণসহ শিখব।


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

  • SQLite ইন্সটল থাকতে হবে (সিরিজের ৩য় পর্ব দেখুন)।
  • COMPANY টেবিল ব্যবহার করব। alter_demo.db নামে ডাটাবেস তৈরি করি।

টার্মিনাল:

bash

sqlite3 alter_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।

১. ALTER TABLE-এর সাধারণ সিনট্যাক্স

SQLite-তে ALTER TABLE-এর দুটি রূপ:

টেবিলের নাম পরিবর্তন:

sql

ALTER TABLE database_name.table_name RENAME TO new_table_name;

নতুন কলাম যোগ করা:

sql

ALTER TABLE database_name.table_name ADD COLUMN column_def...;

database_name. ঐচ্ছিক। মূল ডাটাবেসের জন্য না দিলেও চলে। column_def-এ কলামের নাম, ডেটা টাইপ ও প্রয়োজনীয় কনস্ট্রেইন্ট (যেমন DEFAULT, NOT NULL ইত্যাদি) দেওয়া যায়। তবে কিছু সীমাবদ্ধতা আছে: নতুন কলামে NOT NULL দিতে গেলে অবশ্যই DEFAULT মান উল্লেখ করতে হবে, নয়তো এরর আসবে, কারণ বিদ্যমান সারিগুলোর জন্য NULL মান বসবে। আর UNIQUE বা PRIMARY KEY কনস্ট্রেইন্ট ADD COLUMN-এর সাথে দেওয়া যায় না।


২. টেবিলের নাম পরিবর্তন (RENAME TO)

COMPANY টেবিলের নাম বদলে OLD_COMPANY রাখি:

sql

ALTER TABLE COMPANY RENAME TO OLD_COMPANY;

এখন .tables কমান্ড দিয়ে দেখি:

sql

.tables
-- আউটপুট: OLD_COMPANY

SELECT * FROM OLD_COMPANY; চালালে আগের সব ডেটা অক্ষত আছে। টেবিলের নাম পরিবর্তন করলে ডেটার কোনো ক্ষতি হয় না, এবং টেবিলের সাথে সম্পর্কিত ইনডেক্স ও ট্রিগারও স্বয়ংক্রিয়ভাবে নতুন নামের সাথে আপডেট হয়ে যায়।


৩. নতুন কলাম যোগ করা (ADD COLUMN)

OLD_COMPANY টেবিলে SEX নামে একটি কলাম যোগ করি, যেখানে লিঙ্গ সংরক্ষণ করা হবে (এক অক্ষর)।

sql

ALTER TABLE OLD_COMPANY ADD COLUMN SEX char(1);

এখন SELECT * FROM OLD_COMPANY; দিলে আউটপুট:

text

ID          NAME        AGE         ADDRESS     SALARY      SEX
----------  ----------  ----------  ----------  ----------  ----------
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

লক্ষ্য করুন, SEX কলামের সব সারিতে NULL বসেছে। এটি ডিফল্ট আচরণ। আপনি চাইলে ডিফল্ট মান দিতে পারেন:

sql

ALTER TABLE OLD_COMPANY ADD COLUMN STATUS TEXT DEFAULT 'Active';

তাহলে বিদ্যমান সব সারির জন্য STATUS-এ ‘Active’ বসবে। আবার NOT NULL চাইলে অবশ্যই DEFAULT দিতে হবে:

sql

ALTER TABLE OLD_COMPANY ADD COLUMN COUNTRY TEXT NOT NULL DEFAULT 'USA';

৪. SQLite-তে ALTER TABLE-এর সীমাবদ্ধতা

SQLite-র ALTER TABLE কেবল উপরের দুটি অপারেশন সমর্থন করে। আপনি পারবেন না:

  • কোনো কলাম মুছে ফেলতে (DROP COLUMN)।
  • কলামের নাম বা ডেটা টাইপ পরিবর্তন করতে (ALTER COLUMN)।
  • নতুন কনস্ট্রেইন্ট (UNIQUE, CHECK, FOREIGN KEY) যোগ বা মুছতে।

তাহলে কী করবেন? যদি জটিল পরিবর্তন দরকার হয়, তাহলে এই ধাপ অনুসরণ করুন:

  1. কাঙ্খিত গঠনসহ একটি নতুন টেবিল তৈরি করুন।
  2. পুরনো টেবিল থেকে ডেটা কপি করে নতুন টেবিলে ইনসার্ট করুন (INSERT INTO new_table SELECT ... FROM old_table)।
  3. পুরনো টেবিল ড্রপ করুন (DROP TABLE old_table)।
  4. নতুন টেবিলের নাম পরিবর্তন করে পুরনো নাম দিন (ALTER TABLE new_table RENAME TO old_table)।

উদাহরণ: ধরুন, আমরা SEX কলামটি বাদ দিতে চাই। নতুন টেবিল COMPANY_NEW:

sql

CREATE TABLE COMPANY_NEW (
   ID INT PRIMARY KEY NOT NULL,
   NAME TEXT NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR(50),
   SALARY REAL
);

INSERT INTO COMPANY_NEW (ID, NAME, AGE, ADDRESS, SALARY)
SELECT ID, NAME, AGE, ADDRESS, SALARY FROM OLD_COMPANY;

DROP TABLE OLD_COMPANY;
ALTER TABLE COMPANY_NEW RENAME TO COMPANY;

এখন COMPANY টেবিলে SEX কলাম নেই।


৫. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ

শুধুমাত্র alter_demo.db ফাইলটি ব্যবহৃত হচ্ছে। কোনো অতিরিক্ত প্যাকেজ ইন্সটল করতে হবে না।

text

project-folder/
└── alter_demo.db

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

  • RENAME-এর সময় সতর্কতা: টেবিলের নাম বদলালে সেই টেবিলের উপর নির্ভরশীল ভিউ বা ট্রিগার আপডেট হয়, কিন্তু প্রোগ্রাম কোডে হার্ডকোডেড নাম থাকলে ম্যানুয়ালি পরিবর্তন করতে হবে।
  • ADD COLUMN-এ DEFAULT: বিদ্যমান ডেটার জন্য নতুন কলামে ডিফল্ট মান দেওয়া সবসময় ভালো প্র্যাকটিস, যাতে অপ্রত্যাশিত NULL এড়ানো যায়।
  • ADD COLUMN-এ UNIQUE নয়: নতুন কলামে সরাসরি UNIQUE বা PRIMARY KEY দেওয়া যাবে না। প্রয়োজনে আলাদা করে UNIQUE INDEX তৈরি করতে পারেন পরে।
  • কলামের অবস্থান: SQLite-তে নতুন কলাম সবসময় টেবিলের শেষে যোগ হয়। কলামের ক্রম পরিবর্তনের কোনো উপায় নেই (সেটা চাইলে নতুন টেবিল তৈরি পদ্ধতি ব্যবহার করতে হবে)।

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

টার্মিনালে নিচের কমান্ডগুলো চালান:

sql

.headers on
.mode column

-- বর্তমান টেবিল দেখি
.tables
SELECT * FROM COMPANY;

-- ১. টেবিল রিনেম
ALTER TABLE COMPANY RENAME TO STAFF;
.tables

-- ২. নতুন কলাম যোগ
ALTER TABLE STAFF ADD COLUMN EMAIL TEXT;
SELECT * FROM STAFF;

-- ৩. ডিফল্ট সহ নতুন কলাম
ALTER TABLE STAFF ADD COLUMN ACTIVE INTEGER DEFAULT 1;
SELECT * FROM STAFF;

-- পুনরায় আগের নামে ফেরত
ALTER TABLE STAFF RENAME TO COMPANY;

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

আমরা শিখব SQLite Views – কিভাবে এক বা একাধিক টেবিলের উপর ভিত্তি করে ভার্চুয়াল টেবিল তৈরি করতে হয় এবং এর ব্যবহারিক প্রয়োগ।

লেখকের কথা: ALTER TABLE ছোট পরিসরে কাজ করলেও টেবিল রক্ষণাবেক্ষণে খুবই দরকারি। বাংলায় প্রযুক্তি শেখার এই ধারা অব্যাহত রাখতে আপনার শেয়ার ও উৎসাহ আমাদের বড় প্রেরণা। পোস্টটি ভালো লাগলে বন্ধুদের জানাতে ভুলবেন না! সম্পূর্ণ সিরিজের আপডেট পেতে 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 – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)