delete-drop

পাঠ ১৬ · DELETE ও DROP

DELETE কী?

টেবিল থেকে এক বা একাধিক সারি মুছে ফেলতে DELETE ব্যবহার করি। টেবিল থেকে যায়, শুধু সারিগুলো চলে যায়।

এই পাঠের নিয়ম
  • এই পাঠের কমান্ডগুলো টেবিলের ডেটা স্থায়ীভাবে বদলে দেয়।
  • প্রতিটি উদাহরণ মূল ডেটা থেকে শুরু হয়েছে। একটি উদাহরণের পরিবর্তন পরের উদাহরণে নেই।
  • SQL Playground এ চর্চা করলে প্রতিটি উদাহরণের পরে Reset করে আবার মূল টেবিল তৈরি করো। তাহলে ফলাফল এই পাতার সাথে মিলবে।

সিনট্যাক্স

SQL Syntax Rule
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 3 এর রেজাল্ট (আগে)৩টি সারি
rollsubject_codemarks
310160
327529
330465
↓ পরিবর্তনের পরে
roll 3 এর রেজাল্ট (পরে)২টি সারি
rollsubject_codemarks
310160
327529

উদাহরণ ২: একসাথে একাধিক সারি

যেসব রেজাল্টে নম্বর ৩৩ এর কম, সেগুলো মুছি। শর্ত যতগুলো সারি মানবে, সবগুলো মুছে যাবে।

DELETE FROM result WHERE marks < 33;
ICT এর রেজাল্ট (আগে)৫টি সারি
rollsubject_codemarks
127588
227578
327529
427531
527565
↓ পরিবর্তনের পরে
ICT এর রেজাল্ট (পরে)৩টি সারি
rollsubject_codemarks
127588
227578
527565

উদাহরণ ৩: ফরেন কী থাকলে

Priya (roll 5) কলেজ ছেড়ে দিয়েছে। সরাসরি student টেবিল থেকে তাকে মুছতে চাই।

DELETE FROM student WHERE roll = 5;
Error
FOREIGN KEY constraint failed
result ও contact টেবিলে roll 5 এর সারি আছে। এগুলো ফরেন কী দিয়ে student এর roll 5 কে নির্দেশ করে। তাই ফরেন কী মেনে চলা DBMS (যেমন MySQL) student এর সারি মুছতে দেয় না।

ঠিক উপায় হলো আগে যেসব টেবিল student কে নির্দেশ করে সেখান থেকে মোছা, তারপর student থেকে।

DELETE FROM result WHERE roll = 5;
DELETE FROM contact WHERE roll = 5;
DELETE FROM student WHERE roll = 5;
আগে৫টি সারি
rollnameclasssectiongroup_name
1Rudra11AScience
2Habib12ACommerce
3Pappu11BArts
4Anik12BScience
5Priya11ACommerce
↓ পরিবর্তনের পরে
পরে৪টি সারি
rollnameclasssectiongroup_name
1Rudra11AScience
2Habib12ACommerce
3Pappu11BArts
4Anik12BScience

সব সারি মুছে ফেলা

WHERE না দিলে টেবিলের সব সারি মুছে যায়। টেবিল ও কলামগুলো থাকে, কিন্তু খালি।

DELETE FROM result;
result (পরে)০টি সারি
rollsubject_codemarks

DROP TABLE কী?

DROP TABLE পুরো টেবিল মুছে ফেলে। ডেটা, কলাম, গঠন কিছুই থাকে না।

SQL Syntax Rule
DROP TABLE [টেবিলের নাম];

উদাহরণ ৪: contact টেবিল মুছে ফেলা

DROP TABLE contact;

এরপর contact থেকে ডেটা দেখতে চাইলে:

SELECT * FROM contact;
Error
no such table: contact
contact নামে আর কোনো টেবিল নেই।

contact কে অন্য কোনো টেবিল নির্দেশ করে না, তাই এটি মোছা গেছে। student কে result ও contact নির্দেশ করে। ফরেন কী মেনে চলা DBMS এ DROP TABLE student; সরাসরি চলবে না।

DELETE বনাম DROP TABLE
DELETEDROP TABLE
কী মুছেসারি (ডেটা)পুরো টেবিল
টেবিলের গঠনথেকে যায়থাকে না
WHERE দেওয়া যায়হ্যাঁনা
ধরনDMLDDL
মনে রাখো
  • 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;
পরিবর্তনের পরে২টি সারি
rollsubject_codemarks
225375
227578
২

Barisal ঠিকানার contact সারিটি মুছে ফেলো।

উত্তর দেখো
DELETE FROM contact WHERE address = 'Barisal';
পরিবর্তনের পরে৪টি সারি
contact_idrolladdressmobile_no
1011Gopalganj01711111111
1022Narayanganj01822222222
1044Dhaka01644444444
1055Khulna01555555555
৩

History (304) বিষয়ের সব রেজাল্ট মুছে ফেলো।

উত্তর দেখো
DELETE FROM result WHERE subject_code = 304;
পরিবর্তনের পরে২টি সারি
rollsubject_codemarks
310160
327529