মাইএসকিএলে ফরেন কী-এর জন্য কীভাবে রিআরসিআরসিটি ব্যবহার করবেন?


11

এর ডাটাবেস কাঠামোতে

  CREATE TABLE Country (
  name varchar(40) NOT NULL,
  PRIMARY KEY  (name)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE City (
  name varchar(40) NOT NULL,
  PRIMARY KEY  (name)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE Map (
  country varchar(40) NOT NULL,
  city varchar(100) NOT NULL,
  PRIMARY KEY  (country,city),
  FOREIGN KEY (country) REFERENCES Country (name) ON DELETE CASCADE,
  FOREIGN KEY (city) REFERENCES City (name) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

আমি Cityএই তিনটি সমান কমান্ড দ্বারা সন্তানের সাথে সম্পর্কিত মানটি অক্ষত রেখে পিতামাতাকে মুছে ফেলার আশা করি

  FOREIGN KEY (city) REFERENCES City (name) ON DELETE NO ACTION
  FOREIGN KEY (city) REFERENCES City (name) ON DELETE RESTRICT
  FOREIGN KEY (city) REFERENCES City (name)

তবে NO ACTIONOR ব্যবহার করার সময় RESTRICTবা বাদ দিলে ON DELETE। এই ত্রুটি সহ মাইএসকিউএল আমাকে প্যারেন্ট কলাম থেকে মুছতে দেয় না:

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails 
('test'.'Map', CONSTRAINT 'Map_ibfk_2' FOREIGN KEY ('city') REFERENCES 'City'('name')
 ON DELETE RESTRICT

আমি কোথায় ভুল করছি? এসকিউএল এর দায়িত্ব না কি NO ACTIONপিতামাতাকে মুছে ফেলা এবং শিশুকে এতিম রেখে যাওয়া?

উত্তর:


13

নিষিদ্ধকরণের উপর মাইএসকিউএল ডকুমেন্টেশন অনুযায়ী

STR নিষিদ্ধ: পিতামাতার সারণির জন্য মুছুন বা আপডেট অপারেশন প্রত্যাখ্যান করে। নিষিদ্ধকরণ (বা কোনও পদক্ষেপ) নির্দিষ্ট করা ওন মুছে ফেলা বা ওপেন আপডেট আপডেটটি বাদ দেওয়ার মতোই।

কোনও অ্যাকশন হিসাবে

O কোন ক্রিয়া: স্ট্যান্ডার্ড এসকিউএল থেকে একটি কীওয়ার্ড। মাইএসকিউএলে, রিআরসিআরসিটি এর সমতুল্য। রেফারেন্সড টেবিলে যদি কোনও সম্পর্কিত বিদেশী কী মান থাকে তবে আইএনএনডিবি প্যারেন্ট টেবিলের জন্য মোছা বা আপডেট অপারেশনটিকে প্রত্যাখ্যান করে। কিছু ডাটাবেস সিস্টেমে স্থগিত চেক রয়েছে এবং কোনও অ্যাকশন একটি মুলতুবি চেক। মাইএসকিউএলে, বিদেশী কী সীমাবদ্ধতাগুলি তাত্ক্ষণিকভাবে পরীক্ষা করা হয়, সুতরাং কোনও অ্যাকশনই রিস্ট্রাক্টের মতো নয়।

নিষিদ্ধকরণ মুছুন পিতামাতাকে মুছে ফেলা থেকে বাচ্চাদের নয় ects


5

আপনি যদি পিতামাতাকে মুছতে এবং সন্তানকে ছেড়ে দিতে চান, তবে আপনি সম্ভবত ON DELETE SET NULLবিকল্পটি চাইছেন :

নাল সেট করুন: মুখ্য টেবিল থেকে সারিটি মুছুন বা আপডেট করুন এবং শিশু টেবিলের মধ্যে বিদেশী কী কলাম বা কলামগুলি নূলে সেট করুন। ওপেন ডিলিট সেট নুল এবং ওপেনডেট সেট নুল ক্লজ উভয়ই সমর্থিত।

আপনি যদি একটি সেট নাল ক্রিয়া নির্দিষ্ট করে থাকেন তবে নিশ্চিত হয়ে নিন যে আপনি শিশু টেবিলে কলামগুলি নাল হিসাবে ঘোষণা করেন নি।

এই শেষ বাক্যে প্রচুর 'না' রয়েছে, তাই কেবল নিশ্চিত করুন যে প্যারেন্ট_আইডি নাল হতে পারে।

এই সম্পর্কিত ক্যাসেশনটি আরও দেখুন: বিদেশী কী সীমাবদ্ধতাগুলি মুছে ফেলা / আপডেট করার ক্ষেত্রে সেট ন্যূনেলটির উদ্দেশ্য কী?

একটি বিদেশী কী সংজ্ঞায়িত করে, আপনি ডাটাবেসকে বলেছিলেন যে সন্তানের টেবিলে যে পিতামাতার সাথে সম্পর্কিত মান নেই সেগুলিতে প্রবেশপত্রগুলি গ্রহণ করবেন না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.