যদি আপনার ক্যাসকেডিং কোনও পণ্যটিকে মুছে দেয় কারণ এটি যে কোনও বিভাগের সদস্য নিহত হয়েছিল, তবে আপনি আপনার বিদেশী কীগুলি ভুলভাবে সেট আপ করেছেন। আপনার উদাহরণ সারণী দেওয়া, আপনার নিম্নলিখিত টেবিল সেটআপ করা উচিত:
CREATE TABLE categories (
id int unsigned not null primary key,
name VARCHAR(255) default null
)Engine=InnoDB;
CREATE TABLE products (
id int unsigned not null primary key,
name VARCHAR(255) default null
)Engine=InnoDB;
CREATE TABLE categories_products (
category_id int unsigned not null,
product_id int unsigned not null,
PRIMARY KEY (category_id, product_id),
KEY pkey (product_id),
FOREIGN KEY (category_id) REFERENCES categories (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (product_id) REFERENCES products (id)
ON DELETE CASCADE
ON UPDATE CASCADE
)Engine=InnoDB;
এইভাবে, আপনি কোনও পণ্য বা একটি বিভাগ মুছতে পারেন, এবং কেবল শ্রেণি_র প্রোডাক্টগুলিতে যুক্ত সম্পর্কিত রেকর্ডগুলি পাশাপাশি মারা যাবে। ক্যাসকেড গাছের উপরে আরও ভ্রমণ করবে না এবং প্যারেন্ট পণ্য / বিভাগের সারণি মোছা হবে।
যেমন
products: boots, mittens, hats, coats
categories: red, green, blue, white, black
prod/cats: red boots, green mittens, red coats, black hats
আপনি যদি 'লাল' বিভাগটি মুছে ফেলেন তবে বিভাগ বিভাগে কেবলমাত্র 'লাল' প্রবেশের সাথে সাথে 'লাল রেট' এবং 'লাল রঙের' কোট দুটি প্রোডাক্ট / বিড়ালের পাশাপাশি মারা যাবে।
মোছাটি আরও দূরে ক্যাসকেড করবে না এবং 'বুট' এবং 'কোট' বিভাগগুলি গ্রহণ করবে না।
মন্তব্য অনুসরণ:
আপনি এখনও ভুল বোঝাবুঝি করছেন যে ক্যাসকেড কীভাবে কাজ মুছে দেয়। তারা কেবলমাত্র সেই টেবিলগুলিকেই প্রভাবিত করে যেখানে "মুছে ফেলা ক্যাসকেড" সংজ্ঞায়িত করা হয়েছে। এই ক্ষেত্রে, ক্যাসকেডটি "বিভাগগুলি_প্রডাক্টগুলি" সারণীতে সেট করা আছে। আপনি 'লাল' বিভাগ মুছে ফেলেন, তাহলে শুধুমাত্র রেকর্ডগুলি categories_products মোছার CASCADE হবে ঐ কোথায় আছেন category_id = red
। এটি 'রেকর্ডিং_আইডি = নীল' এমন কোনও রেকর্ড স্পর্শ করবে না এবং এটি "পণ্যগুলি" টেবিলের দিকে ভ্রমণ করবে না, কারণ সেই টেবিলটিতে কোনও বিদেশী কী সংজ্ঞায়িত হয়নি।
আরও দৃ concrete় উদাহরণ এখানে:
categories: products:
+----+------+ +----+---------+
| id | name | | id | name |
+----+------+ +----+---------+
| 1 | red | | 1 | mittens |
| 2 | blue | | 2 | boots |
+---++------+ +----+---------+
products_categories:
+------------+-------------+
| product_id | category_id |
+------------+-------------+
| 1 | 1 | // red mittens
| 1 | 2 | // blue mittens
| 2 | 1 | // red boots
| 2 | 2 | // blue boots
+------------+-------------+
ধরা যাক আপনি # 2 বিভাগ (নীল) মুছুন:
DELETE FROM categories WHERE (id = 2);
ডিবিএমএস সমস্ত টেবিলগুলিতে নজর রাখবে যেখানে 'বিভাগ' টেবিলের দিকে ইঙ্গিত করে একটি বিদেশী কী রয়েছে এবং ম্যাচিং আইডিটি যেখানে রয়েছে সেগুলি রেকর্ডগুলি মুছে ফেলবে, যেহেতু আমরা কেবলমাত্র বিদেশী কী সম্পর্কটিকে সংজ্ঞায়িত করেছি products_categories
, আপনি একবার এই টেবিলটি দিয়ে শেষ করবেন মুছুন সম্পূর্ণ:
+------------+-------------+
| product_id | category_id |
+------------+-------------+
| 1 | 1 | // red mittens
| 2 | 1 | // red boots
+------------+-------------+
products
সারণীতে কোনও বিদেশী কী সংজ্ঞায়িত করা নেই , সুতরাং ক্যাসকেড সেখানে কাজ করবে না, সুতরাং আপনি বুট এবং মিটেনগুলি তালিকাভুক্ত পেয়েছেন। এখানে কেবল 'নীল বুট' নেই এবং 'নীল রঙের মিটেনস' নেই।