ত্রুটি 1452: একটি শিশু সারি যুক্ত বা আপডেট করতে পারে না: একটি বিদেশী কী বাধা ব্যর্থ হয়


132

আমি মাইএসকিউএল ওয়ার্কবেঞ্চে সারণী তৈরি করেছি যেমন নীচে দেখানো হয়েছে:

অর্ডার টেবিল:

CREATE TABLE Ordre (
  OrdreID   INT NOT NULL,
  OrdreDato DATE DEFAULT NULL,
  KundeID   INT  DEFAULT NULL,
  CONSTRAINT Ordre_pk PRIMARY KEY (OrdreID),
  CONSTRAINT Ordre_fk FOREIGN KEY (KundeID) REFERENCES Kunde (KundeID)
)
  ENGINE = InnoDB;

উত্পাদক টেবিল:

CREATE TABLE Produkt (
  ProduktID          INT NOT NULL,
  ProduktBeskrivelse VARCHAR(100) DEFAULT NULL,
  ProduktFarge       VARCHAR(20)  DEFAULT NULL,
  Enhetpris          INT          DEFAULT NULL,
  CONSTRAINT Produkt_pk PRIMARY KEY (ProduktID)
)
  ENGINE = InnoDB;

এবং সাজানো টেবিল:

CREATE TABLE Ordrelinje (
  Ordre         INT NOT NULL,
  Produkt       INT NOT NULL,
  AntallBestilt INT DEFAULT NULL,
  CONSTRAINT Ordrelinje_pk PRIMARY KEY (Ordre, Produkt),
  CONSTRAINT Ordrelinje_fk FOREIGN KEY (Ordre) REFERENCES Ordre (OrdreID),
  CONSTRAINT Ordrelinje_fk1 FOREIGN KEY (Produkt) REFERENCES Produkt (ProduktID)
)
  ENGINE = InnoDB;

সুতরাং আমি যখন ORDRELINJEটেবিলের মধ্যে মানগুলি সন্নিবেশ করানোর চেষ্টা করি তখন আমি পাই:

ত্রুটি কোড: 1452. একটি শিশু সারি যুক্ত বা আপডেট করতে পারে না: একটি বিদেশী কী বাধা ব্যর্থ হয় ( srdjankOrdrelinje, নিয়ন্ত্রণ Ordrelinje_fkবিদেশী কী ( Ordre) উল্লেখ Ordre( OrdreID))

আমি এই বিষয়ে অন্যান্য পোস্টগুলি দেখেছি, তবে ভাগ্য নেই। আমি কি কিছু পর্যবেক্ষণ করছি বা কি করতে হবে কোন ধারণা?


উত্তর:


172

বিদেশী কী সীমাবদ্ধতা ব্যবহার করে নেওয়া

বৈদেশিক কী সম্পর্কের মধ্যে এমন একটি পিতামাতার সারণি থাকে যা কেন্দ্রীয় ডেটা মানগুলিকে ধারণ করে এবং একই ধরণের মানগুলির সাথে একটি সন্তানের টেবিলটি তার পিতামাতার দিকে ফিরে নির্দেশ করে। বিদেশী কী ধারাটি শিশু সারণিতে নির্দিষ্ট করা আছে।

এটি যে কোনও INSERT বা আপডেটের অপারেশনটিকে প্রত্যাখ্যান করবে যা পিতামাতার টেবিলে কোনও মেলে প্রার্থী কী মান না থাকলে কোনও শিশু টেবিলে একটি বিদেশী কী মান তৈরি করার চেষ্টা করে।

সুতরাং আপনার ত্রুটিটি Error Code: 1452. Cannot add or update a child row: a foreign key constraint failsমূলত এর অর্থ হল যে আপনি নিজের Ordrelinjeটেবিলটিতে একটি সারি যুক্ত করার চেষ্টা করছেন যার জন্য কোনও সারণী (অর্ডারআইডি) Ordreসারণীতে উপস্থিত নেই is

আপনাকে অবশ্যই প্রথমে আপনার Ordreটেবিলটিতে সারিটি sert োকাতে হবে।


বা আমরা কি বিদেশী কী ড্রপ করে ডেটা সন্নিবেশের পরে বিদেশী কী যুক্ত করতে পারি?
বংশী পবন মহেশ 12 '

@ ভামসিপাবনমাহেশ, না, কারণ আপনি যদি তা করেন তবেই; আপনার ফোরইগেন কী সৃষ্টি একই ধরণের ত্রুটির সাথে ব্যর্থ হবে যেহেতু কী ডেটা মিলবে না।
রাহুল

4
যদি কেবল বাচ্চাদের প্যারেন্ট আইড সংজ্ঞায়িত করা হয় তবে এই পিতামাতার উপস্থিতি থাকতে হবে। এবং আমি ভেবেছিলাম আমার বাক্য গঠনটি ভুল ছিল ... এটি আমাকে অনেক সাহায্য করেছিল। ধন্যবাদ!
wst

2
Alচ্ছিক সম্পর্ক সম্পর্কে কী?
হামেমে হামেদী

40

আপনি এই সীমাবদ্ধতা পরীক্ষা করে নিচ্ছেন কারণ Ordreসারণি OrdreIDসন্নিবেশ কমান্ডে রেফারেন্স সরবরাহ করে না ।

মান ঢোকাতে Ordrelinjeআপনাকে প্রথমে মান লিখুন আছে Ordreটেবিল এবং একই ব্যবহার OrdreIDমধ্যে Orderlinjeটেবিল।

অথবা আপনি নাল নয় বাধা সরিয়ে ফেলতে এবং এতে একটি নাল মান সন্নিবেশ করতে পারেন।


29

আপনাকে অবশ্যই শিশু টেবিলের ডেটা মুছে ফেলতে হবে যার প্যারেন্ট টেবিল প্রাথমিক কীটির সাথে কোনও বৈদেশিক কী মান নেই r বা চাইল্ড টেবিল থেকে সমস্ত ডেটা মুছুন তারপরে অভিভাবক সারণীতে প্রাথমিক কী হিসাবে একই বিদেশী কী মানযুক্ত নতুন ডেটা sertোকান । এটা কাজ করা উচিত। এখানে একটি ইউটিউব ভিডিওও রয়েছে


1
এটি সঠিক, পিভট টেবিলের মধ্যে ডেটা beforeোকানোর আগে (এটিতে CASCADE সীমাবদ্ধতা রয়েছে), আপনাকে অবশ্যই প্যারেন্ট টেবিলে ডেটা sertোকাতে হবে। যেমন 1 ম টেবিল - অনুমতি; ২ য় টেবিল - ভূমিকা; তৃতীয় সারণী - অনুমতি_রোল; সুতরাং প্রথম সারণিতে অনুমতি সারণি 2ndোকান, রোলস টেবিলের মধ্যে 2 inোকান এবং শেষ পর্যন্ত অনুমতি_ক্রমে সারণিতে intoোকান।
দীপক পানওয়ার

24

সমস্যাটি বিদেশী কী বাধা নিয়ে। ডিফল্ট দ্বারা (SET FOREIGN_KEY_CHECKS = 1)। FOREIGN_KEY_CHECKS বিকল্পটি InnoDB টেবিলগুলির জন্য বিদেশী কী সীমাবদ্ধতাগুলি পরীক্ষা করে কিনা তা নির্দিষ্ট করে। মাইএসকিউএল - বিদেশী_কেন_সেক সেট করুন

অনুসন্ধান চালানোর আগে আমরা অক্ষম হিসাবে বিদেশী কী চেক সেট করতে পারি। বিদেশী কী অক্ষম করুন

আপনার ক্যোয়ারি চালানোর আগে এই লাইনের একটিটি কার্যকর করুন, তারপরে আপনি সফলভাবে আপনার ক্যোয়ারি চালাতে পারবেন। :)

1) সেশনের জন্য (প্রস্তাবিত)

SET FOREIGN_KEY_CHECKS=0;

2) বিশ্বব্যাপী

SET GLOBAL FOREIGN_KEY_CHECKS=0;

19

এই ত্রুটিটি সাধারণত ঘটে থাকে কারণ চাইল্ড টেবিলের রেফারেন্সিং ফিল্ডে আমাদের কয়েকটি মান রয়েছে, যা পিতামাতার সারণীর রেফারেন্স / প্রার্থী ক্ষেত্রে বিদ্যমান নেই ।

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

এখন, আমরা Left Joinশিশু টেবিলের সেই সমস্ত সারিগুলি সন্ধান করতে ব্যবহার করতে পারি , যার পিতামাতার টেবিলে কোনও মানের মান নেই। নিম্নলিখিত জিজ্ঞাসাটি সেই অনূদৃশ্য সারিগুলি আনতে সহায়ক হবে:

SELECT child_table.* 
FROM child_table 
LEFT JOIN parent_table 
  ON parent_table.referenced_column = child_table.referencing_column 
WHERE parent_table.referenced_column IS NULL

এখন, আপনি ডেটা ঠিক করতে নীচের পদক্ষেপগুলির একটি (বা আরও বেশি) করতে পারেন।

  1. আপনার "ব্যবসায়িক যুক্তি" এর উপর ভিত্তি করে, আপনাকে প্যারেন্ট সারণিতে বিদ্যমান মানগুলির সাথে এই তুলনাহীন মান (গুলি) আপডেট / মেলাতে হবে। আপনার মাঝে মাঝে সেগুলি সেট করার প্রয়োজন হতে পারে null
  2. তুলনামূলক মানযুক্ত এই সারিগুলি মুছুন।
  3. শিশু টেবিলের সাথে তুলনামূলক মানগুলির সাথে মিল রেখে আপনার পিতামাতার টেবিলে নতুন সারি যুক্ত করুন।

ডেটা স্থির হয়ে গেলে, ALTER TABLEসিনট্যাক্স ব্যবহার করে আমরা বিদেশী কী সীমাবদ্ধতা প্রয়োগ করতে পারি ।


আমি টেবিল থেকে সমস্ত ডেটা মুছুন এবং তারপরে এটি বৈদেশিক কী যুক্ত করা হয়েছে ধন্যবাদ আপনাকে ধন্যবাদ
সুমিত কুমার গুপ্ত

4

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


3

আমার সন্তানের টেবিলে আমার পিতামাতার টেবিলে উল্লেখ করা সমস্ত মান থাকা সত্ত্বেও আমি এই সমস্যাটি পাচ্ছিলাম। সমস্যাটি দেখে মনে হয়েছিল যে আমি একক বিদেশী কীতে একাধিক সন্তানের উল্লেখ উল্লেখ করতে পারিনি। অন্য কথায় যদি আমার কাছে পাঁচটি সারি ডেটা একই বিদেশী কী হিসাবে উল্লেখ করা হয়, মাইএসকিউএল কেবল আমাকে প্রথম সারিতে আপলোড করার অনুমতি দিচ্ছিল এবং আমাকে ত্রুটি 1452 দিচ্ছে।

আমার জন্য যা কাজ করেছিল তা হল "SET GLOBAL FOREIGN_KEY_CHECKS = 0" কোড টাইপ করা। এর পরে আমি মাইএসকিউএল থেকে বেরিয়ে এসে এটি পুনরায় চালু করেছি এবং আমি কোনও ত্রুটি ছাড়াই আমার সমস্ত ডেটা আপলোড করতে সক্ষম হয়েছি। তারপরে আমি সিস্টেমটিকে স্বাভাবিক অবস্থায় ফিরিয়ে আনতে "SET GLOBAL FOREIGN_KEY_CHECKS = 1" টাইপ করেছি যদিও আমি বিদেশী_কি_ইকি_সিএইচএস কী করে তা পুরোপুরি নিশ্চিত নই। আশাকরি এটা সাহায্য করবে!


@ মিঃ-ফয়জান পোস্ট করা উত্তরে ইতিমধ্যে যা পরামর্শ দেওয়া হয়েছে তা কি এটি নয়? যদি তা না হয় তবে দয়া করে আপনার উত্তর কী যুক্ত করে তা ব্যাখ্যা করুন।
এড্রিয়ান মোল

2

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


1

তোমার ORDRELINJEটেবিলের সাথে লিঙ্ক করা হয়েছে ORDERটেবিল একটি বিদেশী কী বাধ্যতা ব্যবহার constraint Ordrelinje_fk foreign key(Ordre) references Ordre(OrdreID)যা অনুযায়ী Ordre int NOT NULL,টেবিলের কলাম ORDRELINJEকোনো মেলানো Ordre int NOT NULL,কলাম ORDERটেবিল।

এখন এখানে যা ঘটছে তা হ'ল, আপনি যখন ORDRELINJEটেবিলটিতে নতুন সারিটি সন্নিবেশ করছিলেন, fk বাধা অনুসারে Ordrelinje_fkএটি ORDERটেবিলটি পরীক্ষা করছে OrdreIDযা উপস্থিত রয়েছে কিনা এবং এটি কোনও অর্ডারআইডির সাথে মিলছে না, সংকলক বিদেশী কী লঙ্ঘনের জন্য অভিযোগ করছে। এই কারণেই আপনি এই ত্রুটিটি পাচ্ছেন।

বিদেশী কী হ'ল অন্য সারণীর প্রাথমিক কী যা আপনি যে কোনও টেবিলে উভয়ের মধ্যে সংযোগ স্থাপন করতে ব্যবহার করেন। এই কীটি সারণী তৈরি করার সময় আপনি যে বিদেশী কী সীমাবদ্ধ তা দ্বারা নির্দিষ্ট। ডেটাতে কোনও ক্রিয়াকলাপ অবশ্যই এই সীমাবদ্ধতা লঙ্ঘন করবে না। এই সীমাবদ্ধতা লঙ্ঘন এর ফলে ত্রুটি হতে পারে।

আশা করি আমি এটা পরিষ্কার করে দিয়েছি।


1

বিদেশী কী বৈশিষ্ট্যযুক্ত মান সন্নিবেশ করার সময়, প্রথমে বৈশিষ্ট্য প্রকারটি যাচাই করুন, সেইসাথে প্যারেন্ট রিলেশনে প্রাথমিক কী বৈশিষ্ট্যযুক্ত মানটি যদি পিতা-মাতার সম্পর্কের মানগুলি মেলে, তবে আপনি সহজেই শিশু বৈশিষ্ট্যের মান সন্নিবেশ / আপডেট করতে পারবেন।


1

আপনার প্রাথমিক টেবিলে রেফারেন্স কী থেকে ডেটা যুক্ত করা উচিত শিশু টেবিলে
বিদেশী কীতে এর অর্থ বিদেশী কীতে এলোমেলো ডেটা যুক্ত করবেন না , কেবল অ্যাক্সেসযোগ্য প্রাথমিক কী থেকে ডেটা ব্যবহার করুন

বিদেশী কীতে ডেটার বর্ণনা


1

এটি @ মিঃ-ফাইজান এবং অন্যান্য উত্তরগুলি পড়ার পরে আমাকে সাহায্য করেছিল।

'বিদেশী কী পরীক্ষাগুলি সক্ষম করুন' আনটিক করুন

পিএইচপিএমআইএডমিনে এবং ক্যোয়ারিতে হিট করুন। আমি ওয়ার্কবেঞ্চ সম্পর্কে জানি না তবে অন্যান্য উত্তরগুলি আপনাকে সাহায্য করতে পারে।


0

প্রতিটি টেবিলের মধ্যে আপনার কমপক্ষে একটি কাঁচা প্রবেশ করা উচিত (আপনি যেগুলি বিদেশী কীগুলি নির্দেশ করছেন) তারপরে আপনি বিদেশী কীগুলির মান সন্নিবেশ করতে বা আপডেট করতে পারবেন


0

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


0

আপনি যখন বিদেশী কী ব্যবহার করছেন , আপনার কলামগুলির ক্রম সন্নিবেশের জন্য একই হওয়া উচিত

উদাহরণস্বরূপ, যদি আপনি যোগ করছি যদি (userid, password)table1 থেকে table2 থেকে তারপর table2 অর্ডার একই হতে হবে (userid, password)এবং না মত (password,userid) যেখানে useridহয় বিদেশী কী মধ্যে table2 এর table1


0

সমস্যাটি দেখা দেয় কারণ আপনি শিশু টেবিলে কিছু ডেটা .োকানোর পরে চাইল্ড টেবিলে বিদেশী কী সেট করেছিলেন।

চাইল্ড টেবিল থেকে সমস্ত ডেটা সরানোর চেষ্টা করুন, তারপরে বিদেশী কী সেট করুন এবং তারপরে টেবিলে ডেটা যুক্ত / সন্নিবেশ করুন, এটি কার্যকর হবে।


0

নং পরীক্ষা করুন। অভিভাবক সারণীতে রেকর্ড যা শিশু টেবিলের সাথে মেলে এবং প্রাথমিক কীটি অবশ্যই বিদেশী কী রেফারেন্সের সাথে মেলে। এটি আমার পক্ষে কাজ করে।


-4

এটি 100% কাজ করছে ...

ত্রুটি 1452: একটি শিশু সারি যুক্ত বা আপডেট করতে পারে না: একটি বিদেশী কী বাধা ব্যর্থ হয় .... যদি এই ধরণের ত্রুটি দেখা দেয়: তবে প্রথমে এই টেবিলটিতে যান এবং সেটিংস> যদি ইঞ্জিন হয় তবে চেক করুন: ইনোডিবি তারপরে এটি মাইআইএসএমে পরিবর্তন করুন

(এবং বিদেশী সীমাবদ্ধতাগুলি মুছে দিন)

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