alter-table

পাঠ ১৭ · ALTER TABLE

ALTER TABLE কী?

UPDATE টেবিলের ভেতরের ডেটা বদলায়। কিন্তু টেবিলের গঠন, অর্থাৎ কলাম যোগ করা, বাদ দেওয়া বা নাম বদলানোর জন্য ALTER TABLE ব্যবহার করি। ডেটাবেজ ম্যানেজমেন্ট পাঠে দেখেছি, গঠনের কাজগুলো DDL এর অংশ।

এই পাঠের নিয়ম
  • এই পাঠের কমান্ডগুলো টেবিলের ডেটা স্থায়ীভাবে বদলে দেয়।
  • প্রতিটি উদাহরণ মূল ডেটা থেকে শুরু হয়েছে। একটি উদাহরণের পরিবর্তন পরের উদাহরণে নেই।
  • SQL Playground এ চর্চা করলে প্রতিটি উদাহরণের পরে Reset করে আবার মূল টেবিল তৈরি করো। তাহলে ফলাফল এই পাতার সাথে মিলবে।
ALTER TABLE এর কাজ
কাজলেখার ধরন
নতুন কলাম যোগALTER TABLE student ADD email VARCHAR(50);
কলাম বাদALTER TABLE contact DROP COLUMN mobile_no;
কলামের নাম বদলALTER TABLE contact RENAME COLUMN mobile_no TO phone;
টেবিলের নাম বদলALTER TABLE contact RENAME TO student_contact;

সিনট্যাক্স

SQL Syntax Rule
ALTER TABLE [টেবিলের নাম] ADD [কলামের নাম] [ডেটাটাইপ];
ALTER TABLE [টেবিলের নাম] DROP COLUMN [কলামের নাম];
ALTER TABLE [টেবিলের নাম] RENAME COLUMN [পুরনো নাম] TO [নতুন নাম];

উদাহরণ ১: নতুন কলাম যোগ

student টেবিলে শিক্ষার্থীর email রাখার জন্য একটি কলাম যোগ করি।

ALTER TABLE student ADD email VARCHAR(50);

ব্যাখ্যা

  • ALTER TABLE student→student টেবিলের গঠন বদলাবে
  • ADD email→email নামে নতুন কলাম
  • VARCHAR(50)→সর্বোচ্চ ৫০ অক্ষরের লেখা রাখবে
আগে৫টি সারি
rollnameclasssectiongroup_name
1Rudra11AScience
2Habib12ACommerce
3Pappu11BArts
4Anik12BScience
5Priya11ACommerce
↓ পরিবর্তনের পরে
পরে৫টি সারি
rollnameclasssectiongroup_nameemail
1Rudra11AScienceNULL
2Habib12ACommerceNULL
3Pappu11BArtsNULL
4Anik12BScienceNULL
5Priya11ACommerceNULL

নতুন কলামে আগের সারিগুলোর কোনো মান নেই। কোনো মান না থাকাকে NULL বলে। NULL মানে শূন্য নয়, ফাঁকা লেখাও নয়, মান অজানা।

উদাহরণ ২: নতুন কলামে মান বসানো

কলাম যোগ করার পরে UPDATE দিয়ে মান বসাই।

ALTER TABLE student ADD email VARCHAR(50);
UPDATE student SET email = 'rudra@mail.com' WHERE roll = 1;
student (পরে)৫টি সারি
rollnameclasssectiongroup_nameemail
1Rudra11ASciencerudra@mail.com
2Habib12ACommerceNULL
3Pappu11BArtsNULL
4Anik12BScienceNULL
5Priya11ACommerceNULL

উদাহরণ ৩: কলাম বাদ দেওয়া

contact টেবিল থেকে mobile_no কলামটি বাদ দিই। কলামের সব ডেটাও চলে যাবে।

ALTER TABLE contact DROP COLUMN mobile_no;
আগে৫টি সারি
contact_idrolladdressmobile_no
1011Gopalganj01711111111
1022Narayanganj01822222222
1033Barisal01933333333
1044Dhaka01644444444
1055Khulna01555555555
↓ পরিবর্তনের পরে
পরে৫টি সারি
contact_idrolladdress
1011Gopalganj
1022Narayanganj
1033Barisal
1044Dhaka
1055Khulna

আরও একটি উদাহরণ: কলামের নাম বদল

contact টেবিলের mobile_no কলামের নাম phone করি। ডেটা একই থাকবে, শুধু নাম বদলাবে।

ALTER TABLE contact RENAME COLUMN mobile_no TO phone;
আগে৫টি সারি
contact_idrolladdressmobile_no
1011Gopalganj01711111111
1022Narayanganj01822222222
1033Barisal01933333333
1044Dhaka01644444444
1055Khulna01555555555
↓ পরিবর্তনের পরে
পরে৫টি সারি
contact_idrolladdressphone
1011Gopalganj01711111111
1022Narayanganj01822222222
1033Barisal01933333333
1044Dhaka01644444444
1055Khulna01555555555
মনে রাখো
  • ALTER TABLE গঠন বদলায় (DDL)। UPDATE ডেটা বদলায় (DML)।
  • নতুন কলাম যোগ করলে আগের সারিগুলোতে তার মান NULL থাকে।
  • কলাম বাদ দিলে সেই কলামের সব ডেটা হারিয়ে যায়।
  • RENAME COLUMN চলে MySQL 8.0 ও SQLite 3.25 থেকে, আর SQLite এ DROP COLUMN চলে 3.35 থেকে। পুরনো MySQL এ নাম বদলাতে CHANGE লিখতে হয়।
  • ফরেন কী বা প্রাইমারি কী এর কলাম (যেমন roll) বাদ দেওয়া বা নাম বদলানোর আগে সাবধান। অন্য টেবিল এর উপর নির্ভর করে।

অনুশীলন

প্রতিটি প্রশ্নের Query নিজে লেখো। চাইলে SQL Playground এ টেবিল তৈরি করে চালিয়ে দেখো। তারপর উত্তর মিলিয়ে নাও।

১

subject টেবিলে full_marks নামে INT ধরনের একটি কলাম যোগ করো।

উত্তর দেখো
ALTER TABLE subject ADD full_marks INT;
পরিবর্তনের পরে৬টি সারি
subject_codesubject_namegroup_namefull_marks
101BanglaCommonNULL
275ICTCommonNULL
174PhysicsScienceNULL
253AccountingCommerceNULL
109EconomicsCommerceNULL
304HistoryArtsNULL
২

full_marks কলাম যোগ করে সব বিষয়ের full_marks 100 বসাও।

উত্তর দেখো
ALTER TABLE subject ADD full_marks INT;
UPDATE subject SET full_marks = 100;
পরিবর্তনের পরে৬টি সারি
subject_codesubject_namegroup_namefull_marks
101BanglaCommon100
275ICTCommon100
174PhysicsScience100
253AccountingCommerce100
109EconomicsCommerce100
304HistoryArts100
৩

contact টেবিলের address কলামের নাম বদলে city করো।

উত্তর দেখো
ALTER TABLE contact RENAME COLUMN address TO city;
পরিবর্তনের পরে৫টি সারি
contact_idrollcitymobile_no
1011Gopalganj01711111111
1022Narayanganj01822222222
1033Barisal01933333333
1044Dhaka01644444444
1055Khulna01555555555