DELETE কী?
টেবিল থেকে এক বা একাধিক সারি মুছে ফেলতে DELETE ব্যবহার করি। টেবিল থেকে যায়, শুধু সারিগুলো চলে যায়।
- এই পাঠের কমান্ডগুলো টেবিলের ডেটা স্থায়ীভাবে বদলে দেয়।
- প্রতিটি উদাহরণ মূল ডেটা থেকে শুরু হয়েছে। একটি উদাহরণের পরিবর্তন পরের উদাহরণে নেই।
- SQL Playground এ চর্চা করলে প্রতিটি উদাহরণের পরে Reset করে আবার মূল টেবিল তৈরি করো। তাহলে ফলাফল এই পাতার সাথে মিলবে।
সিনট্যাক্স
DELETE FROM [টেবিলের নাম] WHERE [শর্ত];
লাল সারি = যে সারি বদলাবে বা মুছে যাবে। সবুজ সারি = বদলের পরের নতুন মান।
উদাহরণ ১: একটি সারি মুছে ফেলা
roll 3 এর History (304) রেজাল্টটি ভুল করে ঢুকেছিল। সেটি মুছি।
DELETE FROM result
WHERE roll = 3 AND subject_code = 304;DELETE FROM result→result টেবিল থেকে মুছবেWHERE roll = 3 AND subject_code = 304→শুধু এই একটি সারি
| roll | subject_code | marks |
|---|---|---|
| 3 | 101 | 60 |
| 3 | 275 | 29 |
| 3 | 304 | 65 |
| roll | subject_code | marks |
|---|---|---|
| 3 | 101 | 60 |
| 3 | 275 | 29 |
উদাহরণ ২: একসাথে একাধিক সারি
যেসব রেজাল্টে নম্বর ৩৩ এর কম, সেগুলো মুছি। শর্ত যতগুলো সারি মানবে, সবগুলো মুছে যাবে।
DELETE FROM result WHERE marks < 33;| roll | subject_code | marks |
|---|---|---|
| 1 | 275 | 88 |
| 2 | 275 | 78 |
| 3 | 275 | 29 |
| 4 | 275 | 31 |
| 5 | 275 | 65 |
| roll | subject_code | marks |
|---|---|---|
| 1 | 275 | 88 |
| 2 | 275 | 78 |
| 5 | 275 | 65 |
উদাহরণ ৩: ফরেন কী থাকলে
Priya (roll 5) কলেজ ছেড়ে দিয়েছে। সরাসরি student টেবিল থেকে তাকে মুছতে চাই।
DELETE FROM student WHERE roll = 5;ঠিক উপায় হলো আগে যেসব টেবিল student কে নির্দেশ করে সেখান থেকে মোছা, তারপর student থেকে।
DELETE FROM result WHERE roll = 5;
DELETE FROM contact WHERE roll = 5;
DELETE FROM student WHERE roll = 5;| roll | name | class | section | group_name |
|---|---|---|---|---|
| 1 | Rudra | 11 | A | Science |
| 2 | Habib | 12 | A | Commerce |
| 3 | Pappu | 11 | B | Arts |
| 4 | Anik | 12 | B | Science |
| 5 | Priya | 11 | A | Commerce |
| roll | name | class | section | group_name |
|---|---|---|---|---|
| 1 | Rudra | 11 | A | Science |
| 2 | Habib | 12 | A | Commerce |
| 3 | Pappu | 11 | B | Arts |
| 4 | Anik | 12 | B | Science |
সব সারি মুছে ফেলা
WHERE না দিলে টেবিলের সব সারি মুছে যায়। টেবিল ও কলামগুলো থাকে, কিন্তু খালি।
DELETE FROM result;| roll | subject_code | marks |
|---|
DROP TABLE কী?
DROP TABLE পুরো টেবিল মুছে ফেলে। ডেটা, কলাম, গঠন কিছুই থাকে না।
DROP TABLE [টেবিলের নাম];
উদাহরণ ৪: contact টেবিল মুছে ফেলা
DROP TABLE contact;এরপর contact থেকে ডেটা দেখতে চাইলে:
SELECT * FROM contact;contact কে অন্য কোনো টেবিল নির্দেশ করে না, তাই এটি মোছা গেছে। student কে result ও contact নির্দেশ করে। ফরেন কী মেনে চলা DBMS এ DROP TABLE student; সরাসরি চলবে না।
| DELETE | DROP TABLE | |
|---|---|---|
| কী মুছে | সারি (ডেটা) | পুরো টেবিল |
| টেবিলের গঠন | থেকে যায় | থাকে না |
| WHERE দেওয়া যায় | হ্যাঁ | না |
| ধরন | DML | DDL |
- DELETE চালানোর আগে একই WHERE দিয়ে SELECT চালিয়ে দেখে নাও কোন সারিগুলো মুছবে।
- মুছে ফেলা ডেটা সাধারণত আর ফেরত আনা যায় না।
- SQLite এ ফরেন কী এর নিয়ম শুরুতে বন্ধ থাকে (PRAGMA foreign_keys = ON দিয়ে চালু করতে হয়)। বন্ধ থাকলে উদাহরণ ৩ এর মতো মুছতে দেয়, ফলে result ও contact এ এমন roll থেকে যায় যার কোনো শিক্ষার্থী নেই।
অনুশীলন
প্রতিটি প্রশ্নের Query নিজে লেখো। চাইলে SQL Playground এ টেবিল তৈরি করে চালিয়ে দেখো। তারপর উত্তর মিলিয়ে নাও।
roll 2 এর Economics (109) রেজাল্টটি মুছে ফেলো।
উত্তর দেখো
DELETE FROM result
WHERE roll = 2 AND subject_code = 109;| roll | subject_code | marks |
|---|---|---|
| 2 | 253 | 75 |
| 2 | 275 | 78 |
Barisal ঠিকানার contact সারিটি মুছে ফেলো।
উত্তর দেখো
DELETE FROM contact WHERE address = 'Barisal';| contact_id | roll | address | mobile_no |
|---|---|---|---|
| 101 | 1 | Gopalganj | 01711111111 |
| 102 | 2 | Narayanganj | 01822222222 |
| 104 | 4 | Dhaka | 01644444444 |
| 105 | 5 | Khulna | 01555555555 |
History (304) বিষয়ের সব রেজাল্ট মুছে ফেলো।
উত্তর দেখো
DELETE FROM result WHERE subject_code = 304;| roll | subject_code | marks |
|---|---|---|
| 3 | 101 | 60 |
| 3 | 275 | 29 |
