mysql বিদেশী কী বাধা ভুলভাবে ত্রুটি গঠন করেছে error


173

আমি দুই টেবিল আছে, table1একটি কলাম সঙ্গে পিতা বা মাতা টেবিল IDএবং table2একটি কলাম সঙ্গে IDFromTable1(প্রকৃত নাম নয়) যখন আমি একটি এফ কে করা IDFromTable1থেকে IDমধ্যে table1আমি ভুল পান Foreign key constraint is incorrectly formed errortable1রেকর্ড মুছে ফেলা হলে আমি টেবিল 2 রেকর্ডটি মুছতে চাই । কোন সাহায্যের জন্য ধন্যবাদ

ALTER TABLE `table2`  
   ADD CONSTRAINT `FK1` 
      FOREIGN KEY (`IDFromTable1`) REFERENCES `table1` (`ID`) 
      ON UPDATE CASCADE 
      ON DELETE CASCADE;

অন্য কোনও তথ্যের প্রয়োজন হলে আমাকে জানান। আমি মাইএসকিএলে নতুন new


4
আপনি আপনার টেবিলগুলির জন্য কোন ইঞ্জিন ব্যবহার করছেন? এর ধরন কী table2.IDFromTable1এবং table1.IDকী?
রোমেন

5
এছাড়াও, উভয় টেবিলের জন্য অক্ষর সেটগুলি এক রকম কিনা তা পরীক্ষা করুন।
কার্স্টেন

উভয় টেবিল ইঞ্জিন নির্দোষ। অক্ষর সেটগুলি কোথায় সন্ধান করতে হবে তা নিশ্চিত নয় এবং এটি উভয়ই চর ধরণের। আইডিটি
টেবিল 1-

2
টেবিল 1 এবং টেবিল 2 এর জন্য টেবিল সংজ্ঞা প্রদান করুন। আপনি এই ত্রুটিটি কিভাবে পেলেন? বিদেশী কী তৈরি করতে আপনি কি কোনও সরঞ্জাম ব্যবহার করেন? দেখে মনে হচ্ছে এটি কোনও মাইএসকিউএল নেটিভ ত্রুটি নয়।
ডিভার্ট

@ user516883 - টেবিল সংজ্ঞা পেতে আপনার কি সহায়তা দরকার? হেইডিএসকিউএল এ আপনি সহজভাবে তৈরি করুন কোড ট্যাবে ক্লিক করতে পারেন ।
vলভারো গঞ্জালেজ

উত্তর:


422

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

বিদেশী কী কলামটি ছিল SMALLINT(5) UNSIGNEDএবং রেফারেন্সযুক্ত কলামটি ছিল INT(10) UNSIGNED। একবার আমি তাদের উভয়কে একই ধরণের তৈরি করলে, বিদেশী কী তৈরির কাজটি পুরোপুরি কার্যকর হয়েছিল।


58
বা হতে পারে যে রেফারেন্সকৃত কলামটি প্রাথমিক কী নয়
নওফাল

9
আমার জন্য কিন্ডা অনুরূপ সমস্যা - রেফারেন্সযুক্ত টেবিলটি এখনও উপস্থিত ছিল না। উপস।
অমলগোভিনাস

5
জ্যাক কী করেছে তা আমি পুরোপুরি অভিজ্ঞতা পেয়েছি, তবে আমি হেইডিএসকিউএলে অন্য এফকে ইস্যুতে (বিভিন্ন ধরণের) দৌড়েছি। ভারচারে এফকে একই সমান্তরাল হওয়া দরকার। আশা করি ভবিষ্যতে অন্য কাউকে সাহায্য করবে!
cbloss793

10
আমার ক্ষেত্রে এটি বিভিন্ন এনকোডিং এবং কোলেশন কারণ ছিল।
খাত্রী

1
@ নওফাল - আমি বিশ্বাস করি এটি অগত্যা একটি প্রাথমিক কী হতে হবে না, তবে এটির একটি সূচক থাকা আবশ্যক। প্রাথমিক কীগুলি স্বয়ংক্রিয়ভাবে সূচকযুক্ত হয়।
Itai

48

অভিভাবক টেবিলটি MyISAMইঞ্জিন ব্যবহার করে তৈরি করা হয়েছিল তখন আমারও একই সমস্যা ছিল । এটি একটি নির্বোধ ভুল, যা আমি এটি দিয়ে স্থির করেছি:

ALTER TABLE parent_table ENGINE=InnoDB;

আপনাকে অনেক ধন্যবাদ, আমি এই নিয়ে পাগল হয়ে যাচ্ছিলাম। কোনও ধারণা কেন ডাটাবেস হঠাৎ করে টেবিলগুলির জন্য ইঞ্জিনটি স্যুইচ করবে?
রবার্ট ফ্র্যাঙ্কলিন

28

নিশ্চিত করুন যে কলামগুলি অভিন্ন (একই ধরণের) এবং যদি রেফারেন্স কলামটি না থাকে তবে primary_keyতা নিশ্চিত হয়ে নিন INDEXED


এমনকি এটি আমার ক্ষেত্রেও ঘটেছিল, কোনও ত্রুটি ছিল না, তবে বিদেশী কী যুক্ত করা হয়নি ( KEY referencing_column(referencing_column)
প্রথমটি

2
কীগুলি সূচীকরণ করা হচ্ছে না তা আমার সমস্যা ছিল।
নীল মাস্টার্স

1
আমার এই সমস্যাটি ছিল এবং সমস্যাটি ছিল আমার একটি দ্বৈত কলাম প্রাথমিক কী ছিল এবং আপনি প্রাথমিক কী এর দ্বিতীয় কলামটি বিদেশী কী হিসাবে ব্যবহার করতে পারবেন না। সুতরাং আমি কেবলমাত্র প্রাথমিক কী এর দ্বিতীয় কলামের জন্য নিজস্ব সূচক যুক্ত করেছি এবং তারপরে এটি কাজ করেছে।
ফিরজ

21

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

আপনি আপনার মডেলটিতে কোলেশন মিশ্রিত করবেন না (আপনি কি?) তবে আপনি যদি তা করেন তবে নিশ্চিত হন যে আপনার প্রাথমিক এবং বিদেশী কী ক্ষেত্রগুলি phpmyadmin বা হেইডি এসকিউএল বা আপনি যা ব্যবহার করেন তা একই কল্যাশনের হয় of

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


1
ধন্যবাদ! আমার অনলাইন হোস্টটি ISAM ইঞ্জিন ব্যবহার করে এবং স্থানীয় দেবের জন্য আমি InnoDB ব্যবহার করি। আমি যখন হোস্ট থেকে স্থানীয় একটি টেবিল ব্যাক আপ ... বুম।
বেন

MariaDB- র সাম্প্রতিক সংস্করণগুলি utf8_mb4 কে ডিফল্ট চরসেট হিসাবে ব্যবহার করবে বলে মনে হচ্ছে (যখন সার্ভারের কনফিগারেশনে স্পষ্টভাবে সেট করা নেই) COLLATE utf8mb4_unicode_ciআমার (অপ্রত্যাশিত) সমস্যা (দেব মেশিনে) ছিল।
জনিজেডি

13

আমার একই সমস্যা ছিল, তবে এটি সমাধান হয়েছে।

কেবল নিশ্চিত করুন যে 'টেবিল 1' এর কলাম 'আইডি'তে অনন্য সূচক রয়েছে!

এবং অবশ্যই এই দুটি টেবিলের কলাম 'ID' এবং 'IDFromTable1' এর দৈর্ঘ্য একই হতে হবে। তবে আপনি ইতিমধ্যে এই সম্পর্কে জানেন।


আপনি আমার দিন তৈরি করেছেন।
কেভেনলোলো

1
সাহায্য করে আনন্দ পেলাম! ;)
রেনাত গ্যাটিন

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

রেফারেন্সযুক্ত কলামটি ইনডেক্স করতে হবে, এটি অনন্য হতে হবে না (যদিও এটি সাধারণ ক্ষেত্রে)।
বার্মার

10

শুধু সম্পূর্ণ করার জন্য।

আপনার যদি ভ্রচার (..) এর সাথে কোনও বিদেশী কী থাকে এবং রেফারেন্সযুক্ত টেবিলের অক্ষরটি রেফারেন্সিং সারণীর চেয়ে আলাদা হয় তবে এই ত্রুটিটিও ত্রুটিযুক্ত হতে পারে।

উদাহরণস্বরূপ লাতিন 1 টেবিলের ভারচার (50) কোনও ইউটিএফ 8 টেবিলের ভ্রচার (50) এর চেয়ে আলাদা।


1
এমনকি utf8_unicode_ci এবং utf8_general_ci এ ত্রুটি ঘটায়
লুচটিডিয়োড

10

মাইএসকিএল ত্রুটি পাঠ্য এতটা সহায়তা করে না, আমার ক্ষেত্রে, কলামটিতে "নাল নয়" বাধা ছিল, সুতরাং "মুছে ফেলা সেট নাল" অনুমতি দেওয়া হয়নি


7

যদি সবকিছু ঠিক আছে, শুধু যোগ ->unsigned();শেষে foregin key

যদি এটি কাজ না করে তবে উভয় ক্ষেত্রের ডেটাটাইপ পরীক্ষা করে দেখুন। তারা অবশ্যই একই হতে হবে।


5

আমার একই সমস্যা ছিল, উভয় কলামই INT (11) নাল নয় তবে আমি বিদেশী কী তৈরি করতে সক্ষম হই না। এটি সফলভাবে চালানোর জন্য আমাকে বিদেশী কী চেকগুলি অক্ষম করতে হয়েছিল:

SET FOREIGN_KEY_CHECKS=OFF;
ALTER TABLE ... ADD CONSTRAINT ...
SET FOREIGN_KEY_CHECKS=ON;

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


4
আসলে এটি FOREIGN_KEY_CHECKS
Xmanoux

এটি আমার আরও পাস, কিন্তু আমার সমস্যা কলামে primmary সূচক অনুপস্থিত ছিল সাহায্য করেছিল
bumerang

4

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


4

(সর্বশেষ বিরক্তি) এমনকি যদি ক্ষেত্রের নাম এবং ডেটা টাইপ একই হয় তবে কোলেশন একই না হয় তবে এটি সেই সমস্যারও কারণ হয়ে দাঁড়াবে।

উদাহরণ স্বরূপ

    টিবিএল নাম | ডেটা টাইপ | হালকা খাবার        

    ক্রিয়াকলাপ আইডি | আইএনটি |         ল্যাটিন 1_ জেনারাল_সি     ক্রিয়াকলাপ আইডি | আইএনটি |         utf8_general_ci

এটিতে পরিবর্তন করার চেষ্টা করুন

    টিবিএল নাম | ডেটা টাইপ | হালকা খাবার        

    ক্রিয়াকলাপ আইডি | আইএনটি |         ল্যাটিন 1_ জেনারাল_সি     ক্রিয়াকলাপ আইডি | আইএনটি |         latin1_general_ci

....

এটি আমার পক্ষে কাজ করেছে।


3

টেবিলগুলির ইঞ্জিনটি পরীক্ষা করুন, উভয় টেবিল একই ইঞ্জিন হতে হবে, যা আমাকে এতটা সহায়তা করেছিল।


ভাল যুক্তি! আমি মাইএসকিউএলে একটি জেন ​​কার্ট ডাটাবেস নিয়ে কাজ করছি যার টেবিলগুলি মাইআইএসএএম ইঞ্জিনে ডিফল্টরূপে রয়েছে। আমি ইনোডিবি ইঞ্জিন ব্যবহার করে একটি টেবিল যুক্ত করেছি, এবং আমার টেবিল থেকে মূল জেন কার্টের সাথে একটি বিদেশী কী বাধা যুক্ত করার চেষ্টা করেছি। এটি এই অস্পষ্টতাকে 'ভুলভাবে গঠন করা হয়েছে' ত্রুটি দিয়ে ব্যর্থ হয়েছে। আপনি প্রতিটি টেবিলের জন্য ইঞ্জিনটি দেখতে পাবেনSHOW TABLE STATUS LIKE 'table_name';
নেক

2

আমি একই সমস্যা ছিল।

সমস্যাটি হল রেফারেন্স কলামটি কোনও প্রাথমিক কী নয়।

এটিকে একটি প্রাথমিক কী তৈরি করুন এবং সমস্যাটির সমাধান হয়েছে।


এটি পিকে হওয়ার দরকার নেই, এটিও অনন্য নয়।
ফিলিপ্সি

আসলে ... আমার ক্ষেত্রে এটি এডেক্স টাইপ করে সেট করা স্বাভাবিক কাজ করে।
hendr1x

2

যদিও অন্যান্য উত্তরগুলি বেশ সহায়ক, কেবল আমার অভিজ্ঞতাটিও ভাগ করে নিতে চেয়েছিলেন।

আমি এই সমস্যার মুখোমুখি হয়েছি যখন আমি এমন একটি টেবিল মুছে ফেলেছি যার idইতিমধ্যে অন্যান্য সারণীতে ( তথ্য সহ ) বিদেশী কী হিসাবে উল্লেখ করা হয়েছিল এবং কিছু অতিরিক্ত কলাম দিয়ে টেবিলটি পুনরায় তৈরি / আমদানির চেষ্টা করেছি।

বিনোদনের জন্য ক্যোয়ারী (পিএইচপিএমআইএডমিনে উত্পন্ন) নীচের মত দেখাচ্ছে:

CREATE TABLE `the_table` (
  `id` int(11) NOT NULL,            /* No PRIMARY KEY index */  
  `name` varchar(255) NOT NULL,
  `name_fa` varchar(255) NOT NULL,
  `name_pa` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

... /* SOME DATA DUMP OPERATION */

ALTER TABLE `the_table`
  ADD PRIMARY KEY (`id`), /* PRIMARY KEY INDEX */
  ADD UNIQUE KEY `uk_acu_donor_name` (`name`);

আপনি খেয়াল করতে পারেন, PRIMARY KEYসূচকটি তৈরি করার পরে সেট করা হয়েছিল ( এবং ডেটা সন্নিবেশ করানো ) যা সমস্যা তৈরি করছে।

সমাধান

সমাধানটি হ'ল PRIMARY KEYটেবিল সংজ্ঞা প্রশ্নে সূচকটি যুক্ত করা idছিল যার জন্য বিদেশী কী হিসাবে উল্লেখ করা হত, এবং সেই ALTER TABLEঅংশটি যেখানে সূচকগুলি সেট করা হত তা থেকে সরিয়ে ফেলা :

CREATE TABLE `the_table` (
  `id` int(11) NOT NULL PRIMARY KEY,            /* <<== PRIMARY KEY INDEX ON CREATION */  
  `name` varchar(255) NOT NULL,
  `name_fa` varchar(255) NOT NULL,
  `name_pa` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

এটা আমার জন্য কাজ করে। আমি উদ্বিগ্ন ছিলাম যে আমাকে আমার সফ্টওয়্যারটি পুনরায় ইনস্টল করতে হবে;)
ডিওল্যান্স

2

আমি তার জন্য কয়েক ঘন্টা হারিয়েছি!

এক টেবিলে পিকে ছিল utf8অন্য টেবিলে utf8_unicode_ci!


1

নিম্নলিখিত চালানোর চেষ্টা করুন:

পিতামাতা তৈরি টেবিল প্রদর্শন করুন

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

// বা চরসেটের জন্য পরীক্ষা করুন
"ক্যারেক্টার_সেট_ডেটাবেস" এর মতো ভেরিয়েবলগুলি দেখান;
"কোলেশন_ডেটবেস" এর মতো ভেরিয়েবলগুলি দেখান;

// সম্পাদিত: এরকম কিছু চেষ্টা করুন
টেবিল টেবিল 2 পরিবর্তন করুন
চুক্তি যুক্ত করুন fk_IdTable2
বিদেশী কী (টেবিল 1_আইডি)
রেফারেন্সস টেবিল 1 (টেবিল 1_আইডি)
আপডেট ক্যাসকেডে 
ক্যাসকেড মুছে ফেলুন;

9
ত্রুটির বিষয়ে আরও কিছু বিবরণ পেতে শো ইঞ্জিন ইনোডব স্ট্যাটাস চালানোর চেষ্টা করুন
সুধীর বাস্তকোটি

@ সুধীরবস্তাকোটি - +১! এটা আমার জন্য এটা। বিবরণ সহায়ক। সমস্যাটি দ্রুত সমাধান করতে সক্ষম হয়েছিল।
পল কার্লটন

1

সিমফনি ২.৮ নিয়ে আমারও একই সমস্যা ছিল।

আমি প্রথমে এটি পেলাম না, কারণ বিদেশী কী ইত্যাদির দৈর্ঘ্যের মতো কোনও সমস্যা ছিল না problems

অবশেষে আমাকে প্রকল্প ফোল্ডারে নিম্নলিখিতগুলি করতে হয়েছিল। (একটি সার্ভার পুনঃসূচনা সাহায্য করে না!)

app/console doctrine:cache:clear-metadata app/console doctrine:cache:clear-query app/console doctrine:cache:clear-result


1

ধন্যবাদ এস ডেরিন:

"কেবলমাত্র সমাপ্তির জন্য। যদি আপনার ভ্রচার (..) এর সাথে কোনও বিদেশী কী থাকে এবং রেফারেন্সযুক্ত টেবিলের অক্ষরটি রেফারেন্সিং সারণির চেয়ে আলাদা হয় eg উদাহরণস্বরূপ লাতিন 1 টেবিলের ভ্রচার (50) হ'ল কোনও ইউটিএফ 8 টেবিলের ভারচার (50) এর চেয়ে আলাদা ""

আমি এই সমস্যার সমাধান করেছি, টেবিলের চরিত্রের ধরণ পরিবর্তন করে। সৃষ্টিতে ল্যাটিন 1 রয়েছে এবং সঠিকটি utf8।

পরবর্তী লাইন যুক্ত করুন। ডিফল্ট চরিত্র সেট = utf8;


1

দুটি টেবিলের মধ্যে একটি বিদেশী কী যুক্ত করার জন্য অলটার টেবিল ব্যবহার করার ক্ষেত্রে আমার সমস্যা ছিল এবং যে জিনিসটি আমাকে সহায়তা করেছিল তা প্রতিটি কলামে যে আমি বিদেশী কী সম্পর্ক যুক্ত করার চেষ্টা করছি তার সাথে সূচী করা হয়েছিল তা নিশ্চিত করে তুলছে। পিএইচপি মাইএডমিনে এটি করতে: টেবিলটিতে যান এবং কাঠামো ট্যাবে ক্লিক করুন। স্ক্রিনশট হিসাবে প্রদর্শিত পছন্দসই কলামটি সূচী করতে সূচক বিকল্পটি ক্লিক করুন:

এখানে চিত্র বর্ণনা লিখুন

একবার আমি যখন উভয় কলামগুলিকে আমার বিদেশী কীগুলির সাথে উল্লেখ করার চেষ্টা করছিলাম তখন আমি পরিবর্তিত টেবিলটি সফলভাবে ব্যবহার করতে এবং বিদেশী কী সম্পর্ক তৈরি করতে সক্ষম হয়েছি। আপনি দেখতে পাবেন যে কলামগুলি নীচের স্ক্রিনশটের মতো সূচিযুক্ত:

এখানে চিত্র বর্ণনা লিখুন

উভয় সারণীতে জিপ_কোড কীভাবে প্রদর্শিত হবে তা লক্ষ্য করুন।


1

"কোলেশন" তে অন্তর্ভুক্ত করে আপনার উভয় বৈশিষ্ট্যে একই হতে হবে তা আপনার পরীক্ষা করতে হবে


1

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

টেবিলে সূচী হাইডিস্কল যুক্ত করুন


আমার কাছে মাইএসকিএলে একই: আইএনএনডিবি বিদেশী কী এবং রেফারেন্সকৃত কীগুলিতে সূচি প্রয়োজন যাতে বিদেশী কী চেকগুলি দ্রুততর হয় এবং কোনও টেবিল স্ক্যানের প্রয়োজন না হয়।
hendr1x

1

আমি ঠিক এখনই একই ইস্যুতে দৌড়েছি। আমার ক্ষেত্রে, আমাকে যা করতে হবে তা হ'ল তা নিশ্চিত করা যে আমি যে টেবিলটি বিদেশি কীতে উল্লেখ করছি তা অবশ্যই বর্তমান সারণির (কোডের আগে কোডের) আগে তৈরি করা উচিত। সুতরাং আপনি যদি কোনও ভেরিয়েবল (x * 5) উল্লেখ করছেন তবে সিস্টেমটি x টি কী তা জানতে হবে (x কোডের পূর্বের লাইনে অবশ্যই ঘোষণা করতে হবে)। এটি আমার সমস্যা সমাধান করেছে, আশা করি এটি অন্য কাউকে সহায়তা করবে।


আমি মারিয়াডিবি v10.3.18 এ একই সমস্যা পেয়েছি। আমরা মাইএসকিউএল আগে ব্যবহার করেছি এবং এটি সতর্ক করে দিয়েছে যে একটি বিদেশী কী অস্তিত্বহীন টেবিলের দিকে নির্দেশ করে।
মার্থিম

0

মারিয়াডিবি 10.1 এর সাথে লারাভেল 5.1 মাইগ্রেশন স্কিমা বিল্ডারের সাথে আমার একই সমস্যা ছিল।

সমস্যাটি হ'ল আমি কলামটি সেট করার সময় ( চিঠিটি অনুপস্থিত) unignedএর পরিবর্তে টাইপ করেছি ।unsigneds

টাইপ করার পরে ত্রুটি আমার জন্য স্থির হয়েছিল।


0

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

Error appears in below scenario:
Scenario 1:
Table A has column id, type=bigint
Table B column referenced_id type varchar(this column gets the value from the id column of Table A.)
Liquibase changeset for table B:

    <changeset id="XXXXXXXXXXX-1" author="xyz">
            <column name="referenced_id" **type="varchar"**>
        </column>
            </changeset>
    <changeSet id="XXXXXXXXXXX-2" author="xyz">
                <addForeignKeyConstraint constraintName="FK_table_A"
                    referencedTableName="A" **baseColumnNames="referenced_id**"
                    referencedColumnNames="id" baseTableName="B" />
    </changeSet>

Table A changeSet:

    <changeSet id="YYYYYYYYYY" author="xyz">
     <column **name="id"** **type="bigint"** autoIncrement="${autoIncrement}">
                    <constraints primaryKey="true" nullable="false"/>
                </column>
    </changeSet>

Solution: 
correct the type of table B to bigint because the referenced table has type bigint.

Scenrario 2:
The type might be correct but the size might not.
e.g. :
Table B : referenced column type="varchar 50"
Table A : base column type ="varchar 255"

Solution change the size of referenced column to that of base table's column size.

0

আপনি সঠিক ক্ষেত্রে সারণির নাম উল্লেখ করেছেন কিনা তা পরীক্ষা করে দেখুন (যদি টেবিলের নামগুলি আপনার ডাটাবেসে কেস-সংবেদনশীল হয়)। আমার ক্ষেত্রে আমাকে পরিবর্তন করতে হয়েছিল

 CONSTRAINT `FK_PURCHASE_customer_id` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`) ON UPDATE CASCADE ON DELETE CASCADE

প্রতি

 CONSTRAINT `FK_PURCHASE_customer_id` FOREIGN KEY (`customer_id`) REFERENCES `CUSTOMER` (`id`) ON UPDATE CASCADE ON DELETE CASCADE

customerপরিবর্তিত নোট করুন CUSTOMER


0

অথবা আপনি DBDesigner4 ব্যবহার করতে পারেন যা আপনার ডাটাবেস তৈরি করতে এবং এফকে ব্যবহার করে তাদের সংযুক্ত করতে গ্রাফিকাল ইন্টারফেস রয়েছে। আপনার টেবিলটিতে ডান ক্লিক করুন এবং কোড তৈরি করে 'টেবিল এসকিউএল তৈরি করুন' নির্বাচন করুন।

এখানে চিত্র বর্ণনা লিখুন


0

এটি একটি পুরানো বিষয় তবে আমি কিছু আবিষ্কার করেছি। মাইএসকিউএল ওয়ার্কবেঞ্চ তৈরি করার সময় এটি অন্যান্য সারণির সম্পর্কও অর্জন করে। আপনার সাথে সম্পর্কিত স্তম্ভগুলি কেবল ছেড়ে দিন। অন্যান্য স্বয়ংক্রিয়ভাবে যুক্ত কলামগুলি সাফ করুন। এটি আমার পক্ষে কাজ করে।


0

আমার কেসটি হ'ল উল্লেখ করা কলামে আমার একটি টাইপ ছিল:

MariaDB [blog]> alter table t_user add FOREIGN KEY ( country_code ) REFERENCES t_country ( coutry_code );
ERROR 1005 (HY000): Can't create table `blog`.`t_user` (errno: 150 "Foreign key constraint is incorrectly formed")

ত্রুটি বার্তাটি বেশ ক্রিপ্টিক এবং আমি সমস্ত কিছু চেষ্টা করেছি - কলাম, কলশন, ইঞ্জিন ইত্যাদি প্রকার যাচাই করে দেখছি

টাইপোটি নোট করতে আমার কিছুটা সময় লেগেছে এবং এগুলি ঠিক করার পরে সব ঠিকঠাক হয়েছে:

MariaDB [blog]> alter table t_user add FOREIGN KEY ( country_code ) REFERENCES t_country ( country_code );
Query OK, 2 rows affected (0.039 sec)              
Records: 2  Duplicates: 0  Warnings: 0

0

আপনি এই সমস্যাটির মুখোমুখি হয়েছি যখন আপনি প্রাথমিক কীটি বিভিন্ন ডেটা টাইপের মধ্যে রাখেন যেমন:

1 নং টেবিল:

 Schema::create('products', function (Blueprint $table) {
            $table->increments('id');
            $table->string('product_name');
        });

টেবিল ২:

Schema::create('brands', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('brand_name');
        });

দ্বিতীয় সারণীর আইডির জন্য ডেটা ধরণের অবশ্যই ইনক্রিমেন্ট হওয়া উচিত


0

সমস্যাটি সমাধান করা খুব সহজ

উদাহরণ: আপনি নামের সাথে দুই টেবিল আছে ব্যবহারকারীদের এবং পোস্ট এবং আপনার তৈরি করা চাই বিদেশী কী মধ্যে পোস্ট টেবিল এবং আপনি ব্যবহার পিএইচপি মাই এডমিন

1) এ পোস্টে সারণী জুড়ুন নতুন কলাম ( নাম : use_id | টাইপ : মত আইডি মধ্যে ব্যবহারকারী টেবিল | দৈর্ঘ্য : মত আইডি মধ্যে ব্যবহারকারী টেবিল | ডিফল্ট : শূন্য | আরোপ করা : স্বাক্ষরবিহীন |: ইনডেক্স)

2) স্ট্রাকচার ট্যাবে রিলেশন ভিউতে যান ( সীমাবদ্ধ নাম : phpmyAdmin দ্বারা স্বয়ংক্রিয় সেট | কলামের নাম : নির্বাচন করুন user_id | টেবিল : ব্যবহারকারী | কী : আইডি, ...)

এটি সহজভাবে সমাধান করা হয়েছিল

জাভদ মোসবি ইরান / ইউরিমিয়া

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