CRUD কী?
একটা স্কুল ম্যানেজমেন্ট সিস্টেম আছে। প্রতিদিন স্কুলকে করতে হয়:
➕ নতুন শিক্ষার্থী ভর্তি করা
👀 শিক্ষার্থীর তথ্য দেখা
✏️ ফোন নম্বর হালনাগাদ করা
🗑️ পাস করে যাওয়া শিক্ষার্থীর রেকর্ড সরানো
লক্ষ্য করো, এই চারটা কাজ আসলে চারটা মৌলিক ধরনের কাজ — নতুন কিছু তৈরি করা, তথ্য দেখা, তথ্য পরিবর্তন করা, এবং অপ্রয়োজনীয় তথ্য মুছে ফেলা। এই চারটাকে একসাথে বলা হয় CRUD।
সংজ্ঞা: CRUD মানে হলো Create (তৈরি), Read (পড়া/দেখা), Update (হালনাগাদ) ও Delete (মুছে ফেলা) — এই চারটা মৌলিক অপারেশন, যা প্রায় প্রতিটা সফটওয়্যার অ্যাপ্লিকেশন ডেটাবেজের সাথে করে থাকে।
Facebook-এ পোস্ট করা (Create), নিউজফিড দেখা (Read), পোস্ট এডিট করা (Update), পোস্ট মুছে ফেলা (Delete) — সবই CRUD। Amazon, YouTube, ব্যাংকিং অ্যাপ, হাসপাতাল সিস্টেম — সব জায়গাতেই এই একই চারটা কাজ ঘুরেফিরে আসে।
ধারণাগতভাবে CRUD বোঝা
➕ CREATE — নতুন রেকর্ড যোগ করা
ডেটাবেজে সম্পূর্ণ নতুন একটা তথ্য যোগ করা।
🎓 শিক্ষার্থী ভর্তি
🧑💼 নতুন কাস্টমার রেজিস্ট্রেশন
📦 নতুন প্রোডাক্ট এন্ট্রি
👀 READ — ডেটা দেখা
ডেটাবেজে থাকা তথ্য খুঁজে বের করে দেখা, কোনো পরিবর্তন না করে।
🔍 শিক্ষার্থী খোঁজা
🧾 কাস্টমারের অর্ডার দেখা
📋 কর্মচারীর তালিকা প্রদর্শন
✏️ UPDATE — বিদ্যমান তথ্য পরিবর্তন
ইতিমধ্যে থাকা কোনো রেকর্ডের কোনো অংশ পরিবর্তন করা।
🏠 ঠিকানা পরিবর্তন
📱 মোবাইল নম্বর হালনাগাদ
💰 প্রোডাক্টের দাম পরিবর্তন
🗑️ DELETE — অপ্রয়োজনীয় ডেটা মুছে ফেলা
ডেটাবেজ থেকে একটা রেকর্ড স্থায়ীভাবে সরিয়ে ফেলা।
❌ কাস্টমার অ্যাকাউন্ট মুছে ফেলা
🗑️ প্রোডাক্ট সরানো
👤 কর্মচারীর রেকর্ড মুছে ফেলা
📋 তুলনামূলক টেবিল
| অপারেশন | কী করে | বাস্তব উদাহরণ | ডেটার ওপর প্রভাব |
|---|---|---|---|
| Create | নতুন রেকর্ড যোগ করে | নতুন শিক্ষার্থী ভর্তি | রেকর্ড সংখ্যা বাড়ে |
| Read | রেকর্ড দেখায়, পরিবর্তন করে না | শিক্ষার্থী খোঁজা | কোনো পরিবর্তন হয় না |
| Update | বিদ্যমান রেকর্ড পরিবর্তন করে | ফোন নম্বর পরিবর্তন | রেকর্ডের মান বদলায় |
| Delete | রেকর্ড স্থায়ীভাবে সরায় | পাস করা শিক্ষার্থী রিমুভ | রেকর্ড সংখ্যা কমে |
SQL CREATE Operations
ধরো আমাদের একটা Students নামের টেবিল আছে, যেখানে শিক্ষার্থীর তথ্য রাখা হয়। এখন আমরা নতুন একজন শিক্ষার্থী যোগ করবো।
আগে (Before Insert)
| id | name | class |
|---|---|---|
| 1 | রিমা | ৮ |
| 2 | সাকিব | ৯ |
SQL কোয়েরি
| id | name | class |
|---|---|---|
| 1 | রিমা | ৮ |
| 2 | সাকিব | ৯ |
| 3 | তানভীর | ৮ |
লাইন-বাই-লাইন ব্যাখ্যা:
INSERT INTO Students— বলছি "Students" নামের টেবিলে নতুন কিছু ঢোকাতে চাই(id, name, class)— কোন কোন কলামে মান বসাবো তা উল্লেখ করছিVALUES (3, 'তানভীর', 8)— সেই কলামগুলোর জন্য প্রকৃত মান দিচ্ছি, যথাক্রমে id=3, name='তানভীর', class=8
একসাথে একাধিক রেকর্ড যোগ করা
SQL কোডকমা দিয়ে আলাদা করে একাধিক সারি (row) একসাথে একবারে যোগ করা যায়, প্রতিবার আলাদা INSERT লেখার দরকার নেই।
- কলামের নাম ও মানের ক্রম না মেলানো (যেমন name-এর জায়গায় class লিখে ফেলা)
- টেক্সট মানের চারপাশে কোটেশন (' ') ভুলে যাওয়া —
VALUES (3, তানভীর, 8)এভাবে লিখলে এরর আসবে - মান ও কমা গণনায় ভুল করা (কলামের সংখ্যা ও মানের সংখ্যা না মেলা)
সবসময় কলামের নাম স্পষ্টভাবে উল্লেখ করা ভালো (যদিও সবগুলো কলামে মান দিলে বাদ দেওয়া যায়), এতে কোড পড়া সহজ হয় এবং ভুল কম হয়।
SQL READ Operations
এবার আমরা Students টেবিল থেকে বিভিন্নভাবে তথ্য দেখবো (দেখার জন্য মূল কমান্ড হলো SELECT)।
ধাপ ১: সব তথ্য দেখা
SQL কোড| id | name | class |
|---|---|---|
| 1 | রিমা | ৮ |
| 2 | সাকিব | ৯ |
| 3 | তানভীর | ৮ |
ব্যাখ্যা: * মানে "সব কলাম দেখাও"। এই কোয়েরি টেবিলের সব সারি ও সব কলাম দেখাবে।
ধাপ ২: নির্দিষ্ট কলাম দেখা
SQL কোড| name | class |
|---|---|
| রিমা | ৮ |
| সাকিব | ৯ |
| তানভীর | ৮ |
ব্যাখ্যা: শুধু name ও class কলাম দেখানো হচ্ছে, id বাদ দেওয়া হয়েছে।
ধাপ ৩: শর্ত দিয়ে খোঁজা (WHERE)
SQL কোড| id | name | class |
|---|---|---|
| 1 | রিমা | ৮ |
| 3 | তানভীর | ৮ |
ব্যাখ্যা: WHERE class = 8 মানে শুধু তাদের দেখাও যাদের class ঠিক ৮। এটা যেন লাইব্রেরিতে গিয়ে বলা "শুধু ৮ম শ্রেণির বইগুলো দেখাও"।
ধাপ ৪: ডুপ্লিকেট বাদ দিয়ে দেখা (DISTINCT)
SQL কোড| class |
|---|
| ৮ |
| ৯ |
ব্যাখ্যা: যদিও দুইজন শিক্ষার্থী ক্লাস ৮-এ আছে, DISTINCT শুধু আলাদা আলাদা মানগুলো একবার করে দেখায়।
ধাপ ৫: সাজিয়ে দেখা (ORDER BY)
SQL কোড| id | name | class |
|---|---|---|
| 1 | রিমা | ৮ |
| 2 | সাকিব | ৯ |
| 3 | তানভীর | ৮ |
ব্যাখ্যা: ORDER BY name ASC নামের ক্রম অনুযায়ী (A-Z বা বাংলা বর্ণক্রম) সাজিয়ে দেখায়। DESC লিখলে উল্টো ক্রমে (Z-A) দেখাবে।
ধাপ ৬: সীমিত সংখ্যক ফলাফল (LIMIT)
SQL কোড| id | name | class |
|---|---|---|
| 1 | রিমা | ৮ |
| 2 | সাকিব | ৯ |
ব্যাখ্যা: LIMIT 2 শুধু প্রথম ২টা রেকর্ড দেখায়, বাকিগুলো বাদ দেয়।
যখন তুমি WHERE ব্যবহার করো, ডেটাবেজ প্রতিটা সারি একে একে পরীক্ষা করে দেখে শর্তটা পূরণ হচ্ছে কিনা। বড় টেবিলে এটা দ্রুত করার জন্য ডেটাবেজ বিশেষ কৌশল (Index) ব্যবহার করে, যা আমরা পরবর্তী ক্লাসে শিখবো।
- প্রয়োজন ছাড়াই সবসময়
SELECT *ব্যবহার করা, যা বড় টেবিলে অপ্রয়োজনীয় ডেটা লোড করে ধীরগতির কারণ হতে পারে - টেক্সট মান তুলনা করার সময় কোটেশন ভুলে যাওয়া (যেমন
WHERE name = রিমাএর বদলেWHERE name = 'রিমা'লিখতে হবে)
SQL UPDATE Operations
ব্যবসাগুলো নিয়মিত ডেটা হালনাগাদ করে — যেমন কর্মচারীর বেতন বৃদ্ধি, ফোন নম্বর পরিবর্তন, ঠিকানা হালনাগাদ। SQL-এ এই কাজের জন্য ব্যবহার হয় UPDATE।
আগে (Before Update)
| id | name | class |
|---|---|---|
| 2 | সাকিব | ৯ |
SQL কোয়েরি
| id | name | class |
|---|---|---|
| 2 | সাকিব | ১০ |
লাইন-বাই-লাইন ব্যাখ্যা:
UPDATE Students— বলছি Students টেবিলে পরিবর্তন করতে চাইSET class = 10— class কলামের নতুন মান হবে ১০WHERE id = 2— শুধু যার id হলো ২, শুধু তার জন্যই এই পরিবর্তন হবে
যদি ভুলে WHERE লেখা বাদ যায়:
এই কোয়েরি চালালে টেবিলের সব শিক্ষার্থীর class পরিবর্তন হয়ে ১০ হয়ে যাবে! এজন্যই UPDATE চালানোর আগে WHERE শর্ত ভালোভাবে যাচাই করা অত্যন্ত জরুরি।
আরও উদাহরণ
SQL কোডব্যাখ্যা: Sales বিভাগের সবার বেতন ৫০০০ টাকা করে বাড়িয়ে দেওয়া হলো।
UPDATE চালানোর আগে একই WHERE শর্ত দিয়ে একটা SELECT চালিয়ে দেখে নাও ঠিক কোন কোন রেকর্ড প্রভাবিত হবে — এতে ভুল হওয়ার ঝুঁকি কমে।
SQL DELETE Operations
এবার আমরা শিখবো কীভাবে নিরাপদে ডেটা মুছে ফেলা যায়।
আগে (Before Delete)
| id | name | class |
|---|---|---|
| 1 | রিমা | ৮ |
| 2 | সাকিব | ১০ |
| 3 | তানভীর | ৮ |
SQL কোয়েরি
| id | name | class |
|---|---|---|
| 1 | রিমা | ৮ |
| 2 | সাকিব | ১০ |
ব্যাখ্যা: DELETE FROM Students WHERE id = 3 শুধু id=3 (তানভীর)-এর রেকর্ড টেবিল থেকে স্থায়ীভাবে সরিয়ে দিলো।
যদি WHERE বাদ দেওয়া হয়:
এই কোয়েরি টেবিলের সব শিক্ষার্থীর রেকর্ড মুছে ফেলবে! এটা DELETE-এর সবচেয়ে বিপজ্জনক ভুলগুলোর একটা।
TRUNCATE ও DROP — ধারণাগত পরিচিতি
DELETE ছাড়াও আরও দুইটা কমান্ড আছে, যেগুলো আরও বড় পরিসরে ডেটা সরায়:
| কমান্ড | উদ্দেশ্য | প্রভাব | ফেরত আনা যায় কিনা | সাধারণ ব্যবহার |
|---|---|---|---|---|
| DELETE | নির্দিষ্ট শর্তে রেকর্ড মুছে ফেলা | নির্দিষ্ট সারি সরায় | Transaction ব্যবহার করলে সম্ভব (মৌলিক ধারণা) | একজন কাস্টমার রিমুভ করা |
| TRUNCATE | টেবিলের সব ডেটা একসাথে খালি করা | পুরো টেবিল খালি হয়, কাঠামো থাকে | সাধারণত ফেরত আনা যায় না | টেস্ট ডেটা সম্পূর্ণ পরিষ্কার করা |
| DROP | পুরো টেবিলটাই মুছে ফেলা | টেবিল ও তার কাঠামো দুটোই চলে যায় | ফেরত আনা যায় না | অপ্রয়োজনীয় টেবিল সম্পূর্ণ সরানো |
DELETE হলো একটা বইয়ের নির্দিষ্ট পাতা ছিঁড়ে ফেলা। TRUNCATE হলো পুরো বইয়ের সব পাতা খালি করে দেওয়া (কিন্তু বইয়ের বাঁধাই বা কাঠামো থাকবে)। আর DROP হলো পুরো বইটাই ফেলে দেওয়া — বাঁধাই সহ কিছুই থাকবে না।
DELETE, TRUNCATE বা DROP চালানোর আগে সবসময় ডেটার একটা ব্যাকআপ রাখা উচিত, কারণ এগুলোর প্রভাব প্রায়ই স্থায়ী।
সম্পূর্ণ বিজনেস কেস স্টাডি: স্কুল ম্যানেজমেন্ট সিস্টেম
একটা স্কুল তাদের শিক্ষার্থীদের রেকর্ড ম্যানেজ করতে চায় — শুরু থেকে শেষ পর্যন্ত পুরো CRUD ওয়ার্কফ্লো আমরা ধাপে ধাপে দেখবো।
ধাপ ১: নতুন শিক্ষার্থী যোগ করা
ধাপ ২: সব শিক্ষার্থী দেখা
ধাপ ৩: নির্দিষ্ট একজন শিক্ষার্থী খোঁজা
ধাপ ৪: তথ্য হালনাগাদ করা
ধাপ ৫: একজন শিক্ষার্থী মুছে ফেলা (যেমন পাস করে বের হয়ে যাওয়া)
ধাপ ৬: শেষ রেকর্ড যাচাই করা
লক্ষ্য করো, প্রতিটা ধাপেই আমরা প্রথমে SELECT দিয়ে যাচাই করেছি — এটাই পেশাদার SQL ব্যবহারের একটা গুরুত্বপূর্ণ অভ্যাস।
MySQL Workbench প্র্যাকটিক্যাল সেশন
এখন আমরা দেখবো একজন Data Analyst বা Data Scientist বাস্তবে কীভাবে MySQL Workbench-এর মতো টুল ব্যবহার করে CRUD অপারেশন চালান।
ধাপ ১: ডেটাবেজের সাথে সংযোগ করা
MySQL Workbench খুলে সার্ভারের ঠিকানা, ইউজারনেম ও পাসওয়ার্ড দিয়ে "Connect" বাটনে ক্লিক করতে হয়। সফলভাবে সংযুক্ত হলে বাম পাশে ডেটাবেজ ও টেবিলের তালিকা দেখা যাবে।
ধাপ ২: টেবিল তৈরি করা (প্রাথমিক ধারণা)
SQL কোডব্যাখ্যা: এটা একটা খালি টেবিলের কাঠামো তৈরি করে — id সংখ্যা, name/phone লেখা, class সংখ্যা রাখার জায়গা তৈরি হলো। PRIMARY KEY মানে প্রতিটা শিক্ষার্থীর id অবশ্যই আলাদা হতে হবে।
ধাপ ৩: কোয়েরি চালানো ও ফলাফল দেখা
SQL কোড| id | name | class | phone |
|---|---|---|---|
| (এখনো কোনো ডেটা নেই — Empty set) | |||
ধাপ ৪: সিনট্যাক্স এরর সংশোধন করা
ভুল কোডব্যাখ্যা: FROM-এর বদলে ভুল করে FRM লেখা হয়েছে — MySQL কীওয়ার্ড ভুল বানানে চিনতে পারে না। সঠিক বানান FROM।
ধাপ ৫: SQL স্ক্রিপ্ট সংরক্ষণ করা
Workbench-এ Ctrl+S (বা File → Save Script) দিয়ে পুরো SQL কোড একটা .sql ফাইলে সংরক্ষণ করা যায়, যাতে পরে আবার ব্যবহার করা যায়।
- প্রতিটা লাইনের শেষে সেমিকোলন (;) দিতে ভুলে যাওয়া
- টেবিল বা কলামের নাম ভুল বানানে লেখা
- Workbench-এ ভুল ডেটাবেজ সিলেক্ট করে থাকা অবস্থায় কোয়েরি চালানো
সাধারণ শুরুর ভুল
✅ সমাধান: একাধিক কলাম বা মান লেখার সময় প্রতিটার মাঝে কমা আছে কিনা যাচাই করো।
✅ সমাধান: লেখা (string) মান সবসময় সিঙ্গেল কোটেশনের ('...') মধ্যে রাখো, সংখ্যা মানের জন্য দরকার নেই।
✅ সমাধান: সবসময় UPDATE-এর আগে ভাবো — "আমি কি নির্দিষ্ট করে কোন রেকর্ড বলে দিয়েছি?"
✅ সমাধান: DELETE চালানোর আগে একই WHERE শর্ত দিয়ে SELECT চালিয়ে যাচাই করো।
✅ সমাধান: মনে রাখো — DELETE নির্দিষ্ট সারি সরায়, TRUNCATE পুরো টেবিল খালি করে, DROP পুরো টেবিলই মুছে দেয়।
✅ সমাধান: শুধু যেসব কলাম দরকার তা নির্দিষ্ট করে লেখো, এতে পারফরম্যান্স ভালো হয়।
✅ সমাধান: কোয়েরি লেখার আগে টেবিলের কলামগুলো একবার দেখে নাও (DESCRIBE Students;)।
✅ সমাধান: এরর মেসেজ মনোযোগ দিয়ে পড়ো, এটা প্রায়ই সরাসরি বলে দেয় সমস্যা কোথায়।
ইন্ডাস্ট্রি বেস্ট প্র্যাকটিস
💾 ব্যাকআপ রাখা
DELETE বা UPDATE চালানোর আগে সবসময় ডেটার একটা ব্যাকআপ রাখা উচিত
🔍 আগে SELECT দিয়ে যাচাই
UPDATE/DELETE চালানোর আগে একই শর্ত দিয়ে SELECT চালিয়ে দেখে নেওয়া
🔄 Transaction ব্যবহার (প্রাথমিক ধারণা)
গুরুত্বপূর্ণ পরিবর্তনের সময় একাধিক ধাপকে একটা "প্যাকেজ" হিসেবে চালানো, যাতে মাঝপথে সমস্যা হলে সবটাই বাতিল করা যায়
📝 পড়ার-উপযোগী SQL লেখা
কীওয়ার্ড বড় হাতের অক্ষরে (SELECT, WHERE) ও ইনডেন্টেশন ঠিক রাখা
🏷️ অর্থবহ নাম ব্যবহার
টেবিল ও কলামের নাম এমন রাখা যা দেখলেই বোঝা যায় কী আছে (যেমন student_phone, শুধু col1 না)
⚠️ অজানা স্ক্রিপ্ট না চালানো
না বুঝে কোনো SQL স্ক্রিপ্ট কখনো সরাসরি প্রোডাকশন ডেটাবেজে চালানো উচিত না
ক্লাসরুম অ্যাক্টিভিটি
রিভিশন ও প্রশ্নোত্তর
📌 দ্রুত রিভিশন নোট
- CRUD = Create, Read, Update, Delete — প্রায় প্রতিটা অ্যাপের ভিত্তি
- Create →
INSERT INTO ... VALUES ... - Read →
SELECT ... FROM ... WHERE ... - Update →
UPDATE ... SET ... WHERE ... - Delete →
DELETE FROM ... WHERE ... - WHERE ছাড়া UPDATE/DELETE = সব রেকর্ড প্রভাবিত হওয়ার ঝুঁকি
- DELETE (নির্দিষ্ট সারি) vs TRUNCATE (পুরো টেবিল খালি) vs DROP (পুরো টেবিল মুছে ফেলা)
🔄 CRUD ওয়ার্কফ্লো ডায়াগ্রাম
(ওয়েবসাইট/অ্যাপ)
(INSERT/SELECT/UPDATE/DELETE)
যখন তুমি Facebook-এ একটা পোস্ট করো, ঠিক এই একই ধাপগুলো পর্দার আড়ালে ঘটে।
🌐 বাস্তব অ্যাপে CRUD
| অ্যাপ | Create | Read | Update | Delete |
|---|---|---|---|---|
| পোস্ট করা | নিউজফিড দেখা | পোস্ট এডিট করা | পোস্ট মুছে ফেলা | |
| ছবি আপলোড | ফিড স্ক্রল করা | ক্যাপশন পরিবর্তন | ছবি ডিলিট করা | |
| YouTube | ভিডিও আপলোড | ভিডিও দেখা | টাইটেল পরিবর্তন | ভিডিও রিমুভ করা |
| Amazon | অর্ডার দেওয়া | প্রোডাক্ট দেখা | ঠিকানা পরিবর্তন | অর্ডার বাতিল |
| Banking App | নতুন অ্যাকাউন্ট খোলা | ব্যালেন্স দেখা | প্রোফাইল হালনাগাদ | অ্যাকাউন্ট বন্ধ করা |
| Hospital System | নতুন রোগী ভর্তি | রোগীর ইতিহাস দেখা | চিকিৎসার তথ্য হালনাগাদ | ডিসচার্জ হওয়া রোগীর রেকর্ড আর্কাইভ |
| School System | শিক্ষার্থী ভর্তি | রেজাল্ট দেখা | যোগাযোগের তথ্য পরিবর্তন | পাসড-আউট শিক্ষার্থী রিমুভ |
📋 CRUD কমান্ড তুলনামূলক টেবিল
| কমান্ড | উদ্দেশ্য | সাধারণ সিনট্যাক্স | প্রভাব | Rollback সম্ভব? |
|---|---|---|---|---|
| INSERT | নতুন রেকর্ড যোগ | INSERT INTO t (...) VALUES (...) | নতুন সারি যোগ হয় | Transaction থাকলে হ্যাঁ |
| SELECT | ডেটা দেখা | SELECT ... FROM t WHERE ... | কোনো পরিবর্তন হয় না | প্রযোজ্য নয় |
| UPDATE | বিদ্যমান ডেটা পরিবর্তন | UPDATE t SET ... WHERE ... | নির্দিষ্ট সারির মান বদলায় | Transaction থাকলে হ্যাঁ |
| DELETE | নির্দিষ্ট রেকর্ড মুছে ফেলা | DELETE FROM t WHERE ... | নির্দিষ্ট সারি সরে যায় | Transaction থাকলে হ্যাঁ |
| TRUNCATE | পুরো টেবিল খালি করা | TRUNCATE TABLE t | সব সারি একসাথে সরে, কাঠামো থাকে | সাধারণত না |
| DROP | টেবিল সম্পূর্ণ মুছে ফেলা | DROP TABLE t | টেবিল ও কাঠামো দুটোই চলে যায় | না |
❓ ভাইভা প্রশ্ন
💼 ইন্টারভিউ প্রস্তুতি — টপ ৩০টি বিগিনার লেভেল প্রশ্ন
✅ MCQ প্র্যাকটিস
(ক) Remove (খ) Read (গ) Reset (ঘ) Row
(ক) SELECT (খ) UPDATE (গ) INSERT INTO (ঘ) DELETE
(ক) SELECT (খ) UPDATE/DELETE (গ) CREATE TABLE (ঘ) DISTINCT
(ক) DELETE (খ) TRUNCATE (গ) DROP (ঘ) UPDATE
(ক) LIMIT (খ) ORDER BY (গ) DISTINCT (ঘ) WHERE
📝 হোমওয়ার্ক অ্যাসাইনমেন্ট
- একটা "Library Management System"-এর জন্য একটা Books টেবিল কল্পনা করো (id, title, author, available) এবং তার জন্য CREATE, READ, UPDATE, DELETE-এর একটা করে SQL কোয়েরি লেখো।
- DELETE, TRUNCATE ও DROP-এর মধ্যে পার্থক্য নিজের ভাষায় ৫টা বাক্যে লেখো।
- CRUD ওয়ার্কফ্লো ডায়াগ্রাম (User → Application → SQL CRUD → Database → Updated Data) নিজ হাতে এঁকে আনো এবং একটা বাস্তব অ্যাপের উদাহরণ দিয়ে ব্যাখ্যা করো।