মাইকিউএল ত্রুটি 1452 - একটি শিশু সারিতে যোগ বা আপডেট করতে পারে না: একটি বিদেশী কী বাধা ব্যর্থ হয়


237

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

আমি SHOW CREATE TABLEউভয় টেবিলে একটি ক্যোয়ারী করেছি , sourcecodes_tagsবিদেশী কী সহ টেবিলটি sourcecodesহ'ল রেফারেন্সযুক্ত টেবিল।

CREATE TABLE `sourcecodes` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `user_id` int(11) unsigned NOT NULL,
 `language_id` int(11) unsigned NOT NULL,
 `category_id` int(11) unsigned NOT NULL,
 `title` varchar(40) CHARACTER SET utf8 NOT NULL,
 `description` text CHARACTER SET utf8 NOT NULL,
 `views` int(11) unsigned NOT NULL,
 `downloads` int(11) unsigned NOT NULL,
 `time_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 KEY `user_id` (`user_id`),
 KEY `language_id` (`language_id`),
 KEY `category_id` (`category_id`),
 CONSTRAINT `sourcecodes_ibfk_3` FOREIGN KEY (`language_id`) REFERENCES `languages` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `sourcecodes_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `sourcecodes_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

CREATE TABLE `sourcecodes_tags` (
 `sourcecode_id` int(11) unsigned NOT NULL,
 `tag_id` int(11) unsigned NOT NULL,
 KEY `sourcecode_id` (`sourcecode_id`),
 KEY `tag_id` (`tag_id`),
 CONSTRAINT `sourcecodes_tags_ibfk_1` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

এটি কোড যা ত্রুটি উত্পন্ন করে:

ALTER TABLE sourcecodes_tags ADD FOREIGN KEY (sourcecode_id) REFERENCES sourcecodes (id) ON DELETE CASCADE ON UPDATE CASCADE

2
আপনি কি আপনার সন্নিবেশ / আপডেট আদেশটি পোস্ট করতে পারেন যার ফলে ত্রুটি হয়?
জেড

64
আপনি যখন এই বিদেশী কীটি যুক্ত করেন তখন কি আপনার টেবিলগুলি খালি থাকে?
জেড

12
সত্যিকারের আইডি নয় এমন সোর্সকোড_আইডি আছে কিনা তা দেখার জন্য এই কোয়েরিটি চালানোর চেষ্টা করুন: উত্সকোড_আইডি থেকে উত্সকোড_আইডি নির্বাচন করুন যেখানে সোর্সকোড_আইডি ইন নেই (নির্বাচন করুন আইএমপি থেকে উত্সকোড থেকে নির্বাচন করুন);
জেড

11
ধন্যবাদ জেড, সমস্যাটি ছিল একটি টেবিলের মধ্যে এটিতে ডেটা ছিল। এটি সম্পর্কে এখন চিন্তা করে বোঝা যায় যে এটি ব্যর্থ হয়েছিল কারণ এমন কিছু জিনিস ছিল যা অস্তিত্বের আইটেমগুলিকে উল্লেখ করেছিল তবে আমি কখনই এটি অনুমান করিনি। ধন্যবাদ!
জিম

2
টেবিলটি খালি থাকলে কেন এটি ব্যর্থ হয়?
theblackpearl

উত্তর:


226

বেশ সম্ভবত আপনার sourcecodes_tagsটেবিলটিতে এমন sourcecode_idমান রয়েছে যা আপনার sourcecodesটেবিলে আর বিদ্যমান নেই । আপনাকে প্রথমে এগুলি থেকে মুক্তি দিতে হবে।

এই আইডিগুলি সন্ধান করতে পারে এমন একটি কোয়েরি এখানে দেওয়া হয়েছে:

SELECT DISTINCT sourcecode_id FROM 
   sourcecodes_tags tags LEFT JOIN sourcecodes sc ON tags.sourcecode_id=sc.id 
WHERE sc.id IS NULL;

UPDATE sourcecodes_tags SET sourcecode_id = NULL WHERE sourcecode_id NOT IN (SELECT id FROM sourcecodes)এই আইডিগুলি থেকে মুক্তি পেতে সহায়তা করা উচিত। বা যদি এতে nullপ্রবেশের অনুমতি না পাওয়া থাকে sourcecode_idতবে সেই সারিগুলি সরিয়ে ফেলুন বা সেই অনুপস্থিত মানগুলি sourcecodesটেবিলের সাথে যুক্ত করুন।
নেক্সা

আমিও একই ভাবছিলাম কিন্তু, আমার জন্য SELECT Tchild.id FROM Tchild INNER JOIN Tmain ON Tmain.id = Tchild.fk_id WHERE Tmain.id IS NULLকিছুই ফিরিয়ে দেয় না, সমস্যাটা অন্য কোথাও !?
মেলোম্যান

আহ আমার জন্য সমস্যা ছিল। আমি চালানোর চেষ্টা করছিলাম UPDATE `homestead`.`automations` SET `deleted_at`=NULL WHERE deleted_at IS NOT NULL;, যা কোনও বিদেশী কী জড়িত না, তাই আমি বিভ্রান্ত হয়ে পড়েছিলাম। তবে আমার পরিচিতি সারণীতে কিছু রেকর্ড অনুপস্থিত ছিল যা অটোমেশন টেবিলটি উল্লেখ করেছে এটি "ত্রুটি কোড: 1452" ছুঁড়েছে। একটি শিশু সারি যুক্ত বা আপডেট করতে পারে না: একটি বিদেশী কী বাধা ব্যর্থ হয় "।
রায়ান

99

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

SET foreign_key_checks = 0;
alter table tblUsedDestination add constraint f_operatorId foreign key(iOperatorId) references tblOperators (iOperatorId); Query
OK, 8 rows affected (0.23 sec) Records: 8  Duplicates: 0  Warnings: 0
SET foreign_key_checks = 1;

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

5
@ আবুসাদাত মোহাম্মদ ইয়াসিনের এটি হওয়া উচিত নয়: প্রশ্নটি "কী চলছে" জিজ্ঞাসা করা হয়েছিল এবং এই উত্তরটি কেবল এটি ব্যাখ্যা করার চেষ্টা করে না। সিএস_লিমোনাস যেমন উল্লেখ করেছে, এখানে আরও একটি বড় সমস্যা রয়েছে: সমস্ত নতুন মান যা অন্য টেবিলের (অন্য একটি বিদেশী কী হিসাবে করা উচিত) অন্য কোনও মানকে উল্লেখ করা উচিত, কোনও অসঙ্গতিপূর্ণ অবস্থা তৈরি করে কোনও কিছুইকে নির্দেশ করতে পারে না। কেয়েতানোর সংক্ষিপ্ত এবং কার্যকর ব্যাখ্যা আপনাকে সীমাবদ্ধতা তৈরি করার আগে কোন মানগুলি আপডেট করা উচিত তা সন্ধান করার অনুমতি দেয় যাতে আপনি যে প্রশ্নগুলি উপস্থিত থাকতে হবে সেগুলি ফিরিয়ে দেওয়া উচিত এমন প্রশ্নগুলিতে অবাক হবেন না!
আর্মফুট

55

ব্যবহার করুন NOT INযেখানে সীমাবদ্ধতার খুঁজে পেতে constraining :

SELECT column FROM table WHERE column NOT IN 
(SELECT intended_foreign_key FROM another_table)

সুতরাং, আরও নির্দিষ্টভাবে:

SELECT sourcecode_id FROM sourcecodes_tags WHERE sourcecode_id NOT IN 
(SELECT id FROM sourcecodes)

সম্পাদনা: INএবং NOT INঅপারেটরগুলি অপারেটরগুলির তুলনায় অনেক দ্রুত JOIN, পাশাপাশি নির্মাণ এবং পুনরাবৃত্তি করা আরও সহজ বলে পরিচিত।


1
সুতরাং, যদি আমি এটি সঠিকভাবে বুঝতে পারি, আমরা কোনও টেবিলে একটি বিদেশী কী যুক্ত করতে পারি যা ইতিমধ্যে এতে ডেটা রয়েছে, তবে কেবলমাত্র যদি পিতৃ সারণীতে প্রতিটি সারির জন্য একটি শিশু সারি উপস্থিত থাকে? প্যারেন্ট টেবিলে যদি প্রতিটি সারির জন্য কোনও শিশু সারি না থাকে (যা আপনার ক্যোয়ারী আবিষ্কার করে) তবে বিদেশী কী স্ক্রিপ্টটি ব্যর্থ হবে।
ভিনসেন্ট

@ ভিনসেন্ট যদি প্যারেন্ট টেবিল দ্বারা আপনার বোঝানো হয় টেবিলটি রেফারেন্স করা হচ্ছে, তবে হ্যাঁ! সুতরাং কেয়েতানো নির্বাচনের সাহায্যে আপনি নতুন সীমাবদ্ধতা (এফকে) যুক্ত করার আগে আপনার "শিশু" টেবিলটি থেকে আপডেট / অপসারণ করতে হবে এমন সমস্ত সারি পাবেন। একবার যখন তারা সমস্ত "অন্য_ টেবিল" এর মানগুলিতে নির্দেশ করে তবে আপনি যেতে ভাল!
আর্মফুট

23

টেবিলগুলি কেটে ফেলুন এবং তারপরে এফকে সীমাবদ্ধ করার চেষ্টা করুন

আমি জানি এই সমাধানটি কিছুটা বিশ্রী তবে এটি 100% কাজ করে। তবে আমি একমত যে সমস্যার সাথে মোকাবিলার এটি কোনও আদর্শ সমাধান নয়, তবে আমি আশা করি এটি সহায়তা করবে।


4
সব কিছু ছাঁটাই করার দরকার নেই। "আপডেটের উত্সকোড_ট্যাগগুলি সেট উত্সকোড_আইডি = উত্সকোড_ইন যেখানে নেই (উত্সকোড থেকে নির্বাচন করুন আইডি)" যথেষ্ট হবে। অথবা যদি "সোর্সকোড_আইডি" -তে নাল অনুমতি না দেওয়া হয়, তবে সেই সারিগুলি সরিয়ে ফেলুন বা "উত্সকোডগুলি" সারণীতে সেই অনুপস্থিত মানগুলি যুক্ত করুন।
টরবেন

1
কখনও কখনও, যদি ডেটাটি স্বয়ংসোধক পিকে বৃদ্ধি করে, এটি আপনাকে কাটাতে বাধ্য করে।
ফ্রাসোয়া ব্রেটন

2
@ শঙ্করদোমদরন টেবিল কেটে দেওয়া কেন কাজ করে তা নিশ্চিত নন তবে এই সমাধানটি আমার পক্ষে ভাল কাজ করেছে। আমি আমার সম্পর্কগুলি কাজ করতে সক্ষম হয়েছি ... ধন্যবাদ!
মিজআকিটা

@ মিজআকিটা এটি কাজ করে কারণ এটি সারণিগুলিকে মুছে দেয় যা অন্য সারণীতে কোনও সাদৃশ্যযুক্ত মূল্য নেই, নতুন সীমাবদ্ধতা তৈরি হতে দেয়। যদি আপনি এই সারিগুলি সন্ধান করেন এবং সেগুলি আপডেট বা মুছে ফেলুন ( কেয়েতানোর পরামর্শ মত ), আপনার অন্য সারিগুলি মুছতে হবে না ...
আর্মফুট

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

16

আমার জন্য, এই সমস্যাটি চেক এবং সমাধানের জন্য কিছুটা আলাদা এবং সুপার সহজ ছিল।

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

    SHOW TABLE STATUS WHERE Name =  't1';

    ALTER TABLE t1 ENGINE=InnoDB;

14

চাইল্ড.ক্লোমামের ইতিমধ্যে 0 এর মান থাকে এবং প্যারেন্ট.আইডের মান 0 না থাকে তবে চাইল্ড.ক্লমনে প্যারেন্ট.আইডিতে একটি বিদেশী কী সেট করার সময়ও এটি ঘটে।

আপনার অবশ্যই নিশ্চিত করতে হবে যে প্রতিটি সন্তানের কলামটি নুল বা প্যারেন্ট.আইডে বিদ্যমান মান রয়েছে

এবং এখন আমি যে বিবৃতিটি পড়েছি তা পড়েছি, সেটাই যাচাই করছে।


14

আমারও আজ একই সমস্যা ছিল। আমি চারটি জিনিসের জন্য পরীক্ষা করেছি, এর মধ্যে কয়েকটি এখানে ইতিমধ্যে উল্লেখ করা হয়েছে:

  1. আপনার সন্তানের কলামে এমন কোনও মান আছে যা প্যারেন্ট কলামে বিদ্যমান নেই (শিশু কলামটি যদি শুরুর থাকে তবে এনইউএলএল ছাড়া)

  2. শিশু এবং পিতামাতার কলামগুলির কি একই ডেটাটাইপ রয়েছে?

  3. আপনি উল্লেখ করছেন এমন প্যারেন্ট কলামে কি কোনও সূচি রয়েছে? পারফরম্যান্স কারণে মাইএসকিউএল এটির প্রয়োজন বলে মনে হচ্ছে ( http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html )

  4. এবং এটি আমার জন্য এটি সমাধান করেছে: উভয় টেবিলের কি অভিন্ন মিল রয়েছে?

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


7

দেখে মনে হচ্ছে 0 কলামের লাইনটির জন্য কিছু অবৈধ মান রয়েছে যা বৈধ বিদেশী কী নয় তাই মাইএসকিউএল এটির জন্য কোনও বিদেশী কী সীমাবদ্ধতা সেট করতে পারে না।

আপনি এই পদক্ষেপগুলি অনুসরণ করতে পারেন:

  1. আপনি যে কলামটির জন্য এফকে সীমাবদ্ধতা সেট করার চেষ্টা করেছেন তা ড্রপ করুন।

  2. এটিকে আবার যুক্ত করুন এবং এর ডিফল্ট মানটিকে NULL হিসাবে সেট করুন।

  3. এর জন্য আবার কোনও বিদেশী কী বাধার সীমাবদ্ধ করার চেষ্টা করুন।


5

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


4

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



2

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

SELECT * FROM (tablename)
    WHERE (candidate key) <> (proposed foreign key value) 
        AND (candidate key) <> (next proposed foreign key value)

পুনরাবৃত্তি AND (candidate key) <> (next proposed foreign key value)বিদেশী কীতে প্রতিটি মানের জন্য আপনার প্রশ্নের মধ্যে ।

আপনার কাছে যদি এক টন রেকর্ড থাকে তবে এটি কঠিন হতে পারে, তবে যদি আপনার টেবিলটি যুক্তিযুক্তভাবে ছোট হয় তবে এটি খুব বেশি সময় নেয় না। আমি এসকিউএল সিনট্যাক্সে দুর্দান্ত আশ্চর্যজনক নই, তবে এটি আমার পক্ষে বিষয়টি সর্বদা বিচ্ছিন্ন করে দিয়েছে।


2

আপনার টেবিলের উভয় ডেটা খালি করুন এবং কমান্ডটি চালান। এটা কাজ করবে।


ভিহান্দেদ 3 বছর আগে একই উত্তর দিয়েছিল। আসুন আশা করি টেবিলগুলিতে কোনও গুরুত্বপূর্ণ ডেটা ছিল না ...
xlecoustillier

2

লারাভেল এবং স্পষ্টত ব্যবহার করার সময় আমি এই ত্রুটিটি পেয়েছি, একটি বিদেশী কী লিঙ্ক তৈরি করার চেষ্টা করার ফলে একটি 1452 ঘটতে পারে the সমস্যাটি লিঙ্কযুক্ত টেবিলের ডেটার অভাব ছিল।

দয়া করে এখানে একটি উদাহরণ দেখুন: http://mstd.eu/index.php/2016/12/02/laravel-eloquent-integrity-constraint-violation-1452-foreign-key-constraint/


1

আমি এই সমাধানগুলি পড়ছিলাম এবং এই উদাহরণটি সাহায্য করতে পারে।

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

প্রথমে আমি রেফারেন্সযুক্ত সারণীগুলির জন্য সারি তথ্য সন্নিবেশ করি (ইমেল, ক্রেডিট_কার্ড) তারপরে আপনি প্রত্যেকটির জন্য আইডি পাবেন, এই আইডিগুলি তৃতীয় সারণীতে (ক্লায়েন্ট) প্রয়োজনীয়।

যদি আপনি প্রথমে রেফারেন্সযুক্ত সারণিতে সারিগুলি সন্নিবেশ না করেন তবে আপনি যখন তৃতীয় টেবিলে একটি নতুন সারি theোকাবেন তখন বিদেশী কীগুলি উল্লেখ করে মাইএসকিউএল যোগাযোগ করতে সক্ষম হবে না।

আপনি যদি প্রথমে রেফারেন্সযুক্ত সারণির জন্য রেফারেন্সযুক্ত সারিগুলি সন্নিবেশ করান, তারপরে যে সারিটি বিদেশী কীগুলি বোঝায়, কোনও ত্রুটি ঘটে না।

আশাকরি এটা সাহায্য করবে.


mysql> ইমেল (ইমেল) মানগুলিতে প্রবেশ করান ('xxx@yyy.com'); mysql> এনডিটিসি (এনডিটিসি, বছর, মাস) মানগুলিতে'োকান ('1111222233334444', '2000', '01'); mysql> ক্লায়েন্টে প্রবেশ করুন (নম্ব্রেস, এপেলিডোস, টেলিফোনো, আইডিএনডিটিসি, আইডিমেইল) মানগুলি ('মাইনেম', 'মাইয়াপ', '5555555555', 1,1);
SubstanceMX

1

মানটি অন্য টেবিলের মধ্যে রয়েছে তা নিশ্চিত করুন নইলে আপনি এই ত্রুটিটি নির্ধারিত সংশ্লিষ্ট কলামে পেয়ে যাবেন।

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


1

আপনি এই উদাহরণ ব্যবহার করতে পারেন

 START TRANSACTION;
 SET foreign_key_checks = 0;
 ALTER TABLE `job_definers` ADD CONSTRAINT `job_cities_foreign` FOREIGN KEY 
 (`job_cities`) REFERENCES `drop_down_lists`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
 SET foreign_key_checks = 1;
 COMMIT;

দ্রষ্টব্য: আপনি যদি phpmyadmin ব্যবহার করছেন তবে বিদেশী কী পরীক্ষাগুলি সক্ষম করুনটি অনচেক করুন

উদাহরণ হিসাবে এখানে চিত্র বর্ণনা লিখুন

আশা করি এই একাকীকরণ আপনার সমস্যার সমাধান করবে :)


1

আপনার কেবল একটি প্রশ্নের উত্তর দেওয়া দরকার:

আপনার টেবিলটি ইতিমধ্যে ডেটা সংরক্ষণ করছে? (বিশেষত সারণীতে বিদেশী কী অন্তর্ভুক্ত রয়েছে))

যদি উত্তর হ্যাঁ হয়, তবে আপনাকে কেবলমাত্র যা করতে হবে তা হল সমস্ত রেকর্ড মুছে ফেলা, তবে আপনি নিজের টেবিলে কোনও বিদেশী কী যুক্ত করতে মুক্ত।

নির্দেশ মোছা: শিশু থেকে (যার মধ্যে বিদেশী কী টেবিল অন্তর্ভুক্ত) পিতামাতার সারণীতে।

আপনি ডাটা এন্ট্রি করার পরে বিদেশী কী যুক্ত করতে না পারার কারণটি টেবিলের অসামঞ্জস্যতার কারণে, আপনি কীভাবে নতুন ডেটা ভরা টেবিলে একটি নতুন বিদেশী কীটি মোকাবেলা করতে যাচ্ছেন?

উত্তরটি যদি না হয় তবে অন্যান্য নির্দেশাবলী অনুসরণ করুন।


0
UPDATE sourcecodes_tags
SET sourcecode_id = NULL
WHERE sourcecode_id NOT IN (
  SELECT id FROM sourcecodes);

এই আইডিগুলি থেকে মুক্তি পেতে সহায়তা করা উচিত। বা যদি এতে nullপ্রবেশের অনুমতি না পাওয়া থাকে sourcecode_idতবে সেই সারিগুলি সরিয়ে ফেলুন বা সেই অনুপস্থিত মানগুলি sourcecodesটেবিলের সাথে যুক্ত করুন।


0

আমি একই সমস্যা পেয়েছি এবং বিদেশী কী কলামের NULLপরিবর্তে রেখে সমাধান পেয়েছি NOT NULL। এখানে একটি জিজ্ঞাসা:

ALTER TABLE `db`.`table1`
ADD COLUMN `col_table2_fk` INT UNSIGNED NULL,
ADD INDEX `col_table2_fk_idx` (`col_table2_fk` ASC),
ADD CONSTRAINT `col_table2_fk1`
FOREIGN KEY (`col_table2_fk`)
REFERENCES `db`.`table2` (`table2_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

মাইএসকিউএল এই কোয়েরি কার্যকর করেছে!


0

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

এটা আমার জন্য কাজ করেছে।

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