মাইএসকিউএল: টেবিল তৈরি করতে পারে না (ভুল: 150)


156

আমি একটি। এসকিউএল ফাইল আমদানি করার চেষ্টা করছি এবং এটি টেবিল তৈরি করতে ব্যর্থ।

এখানে ব্যর্থ হওয়া ক্যোয়ারীটি এখানে:

CREATE TABLE `data` (
`id` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`value` varchar(15) NOT NULL,
UNIQUE KEY `id` (`id`,`name`),
CONSTRAINT `data_ibfk_1` FOREIGN KEY (`id`) REFERENCES `keywords` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;    

আমি একই ডাটাবেস থেকে। এসকিউএল রফতানি করেছি, আমি সমস্ত টেবিল বাদ দিয়েছি এবং এখন আমি এটি আমদানির চেষ্টা করছি, কেন এটি ব্যর্থ হচ্ছে?

মাইএসকিউএল: './dbname/data.frm' টেবিল তৈরি করতে পারে না (ভুল: 150)


1
এই ত্রুটিটির মূলত সমস্ত কারণের জন্য, মাইএসকিউএল-এর 150 টি (এবং 121 / অন্যান্য বিদেশী কী ত্রুটিগুলি) কী কারণে হয় তার একটি বিস্তৃত সংস্থান এখানে।
জন স্মিথ

21
আমি খুঁজে পেয়েছি যে কলামগুলি অবশ্যই অভিন্ন হবে (এমনকি স্বাক্ষরযুক্ত পতাকাটিও অবশ্যই মেলাতে হবে)
জাস্টিন স্কাইল

3
@ জনস্মিত ... কোথায়?
চার্লস উড

3
আমি এই ব্লগ পোস্টটি পড়ার পরামর্শ দিচ্ছি যা 10 সম্ভাব্য কারণগুলি তালিকাভুক্ত করেছে: verysimple.com/2006/10/22/…
মার্ক

@ চার্লসউড: " জন স্মিথ ... এপ্রিল 6 '13 এ 19:29-এ দেখা হয়েছে ", এটি আপনার মন্তব্যের প্রায় তিন মাস আগে। আমার একটা আশঙ্কা আছে যে এই দুর্বোধ্য পৃথিবীর শেষ অবধি "যেখানে" একটি রহস্য প্রকাশিত হবে না! :>
ট্র্যাজার

উত্তর:


167

মাইএসকিউএল থেকে - বিদেশী কী সীমাবদ্ধতা ডকুমেন্টেশন :

যদি আপনি একটি টেবিলটি বাদ পড়েছিলেন তা পুনরায় তৈরি করেন তবে এর অবশ্যই একটি সংজ্ঞা থাকতে হবে যা বিদেশী কী সীমাবদ্ধতার সাথে এটি উল্লেখ করে। এটিতে অবশ্যই সঠিক কলামের নাম এবং প্রকারগুলি থাকতে হবে এবং এটি অবশ্যই রেফারেন্স কীগুলিতে সূচকগুলি থাকতে হবে, যেমনটি আগে বলা হয়েছিল। এগুলি যদি সন্তুষ্ট না হয় তবে মাইএসকিউএল ত্রুটি 1005 প্রদান করে এবং ত্রুটি বার্তায় 150 ত্রুটি উল্লেখ করে যার অর্থ একটি বিদেশী কী বাধা সঠিকভাবে গঠিত হয়নি। তেমনিভাবে, যদি ত্রুটি 150 এর কারণে যদি একটি ALTER TABLE ব্যর্থ হয় তবে এর অর্থ হ'ল পরিবর্তিত টেবিলের জন্য একটি বিদেশী কী সংজ্ঞাটি ভুলভাবে গঠিত হবে।


1
এক টেবিল থেকে দুটি কলাম কি অন্য টেবিলের এক কলামে রেফারেন্স করতে পারে, এটি কোথায়?
ইউজিন

1
@ ইউজিন: দুটি কলামের প্রত্যেকেরই অন্য টেবিলের পিকে-তে বিদেশী কী সম্পর্ক থাকতে পারে - উভয় কলামই একক বিদেশী কী সম্পর্ক হিসাবে নয়।
ওএমজি পনিজ

1
@ ওএমজিপিওনিস: এই প্রশ্নের উত্তর দেওয়ার জন্য ধন্যবাদ! .. আমি এটি সন্ধান করছিলাম ... আমি এখানে একটি প্রশ্নও জিজ্ঞাসা করেছি stackoverflow.com/questions/13487010/… .... যদিও আমার কিছু ভাল উত্তর আছে তবে আমি সামঞ্জস্য হতে চাই Whether its possible to write Nested Query for my problem? ..আমিও আমাকে অনুরোধ করব আমাকেও উত্তর দিন!
গ্রিজেশ চৌহান

19
আমার ত্রুটিটি ছিল মাস্টার টেবিলে মাইআইএসএএম এবং চাইল্ড টেবিল ইনোডিবি ইঞ্জিন ছিল। বর্তমানের create.sql স্ক্রিপ্টটি সমস্ত টেবিলের জন্য InnoDB ব্যবহার করছিল, তবে আমার খুব পুরানো ইনস্টলেশন ছিল যেখানে প্রথম স্ক্রিপ্টটি মাইআইএসএএম ব্যবহার করে।
যার

2
@ হোমো - হ্যাঁ, এখানে একই ইস্যুতে ছুটে এসেছেন।
অ্যারোথ

96

ত্রুটি 150 মানে আপনার বিদেশী কী নিয়ে আপনার সমস্যা আছে। সম্ভবত বিদেশী টেবিলের কীটি একই ধরণের নয়?


15
ধন্যবাদ :) আমার জন্য, ডেটা টাইপগুলি INT হয় তবে একটিতে স্বাক্ষর না করা হয় অন্যটি না হয়
আনহ এনগুইন

6
স্কিমা জেনারেটর ব্যবহার করার সময় আমি প্রায়শই BIGINTবনাম জুড়ে দৌড়ে যাই INT
শিওনক্রস

বিদেশী চাবি INT মান না হলে আমি একই ইস্যুতে ছুটে এসেছি। বিদেশী কী এর সাথে সম্পর্কিত হলে কলামটি অবশ্যই অদ্বিতীয় হবে।
ফ্যাটএইচভি

62

আপনি চালিয়ে SHOW ENGINE INNODB STATUS;এবং তারপরে LATEST FOREIGN KEY ERRORআউটপুটটি অনুসন্ধান করে প্রকৃত ত্রুটি বার্তাটি পেতে পারেন ।

উত্স: একই প্রশ্নের মধ্যে অন্য ব্যবহারকারীর কাছ থেকে উত্তর


7
এটি আসলে খুব দরকারী। এটি আপনাকে সঠিক ত্রুটিটি বলে।
সিংসর ফাগিয়াল

ধন্যবাদ। এটি লজ্জার বিষয় যে মাইএসকিউএল ওয়ার্কবেঞ্চ এটি ব্যবহার করে না।
scipilot

অসাধারণ. এটি এত সহায়ক। আপনাকে সঠিক ত্রুটি বলে। আমার, কলামটি নূলেবল করা উচিত ছিল কিন্তু "মুছে ফেলতে সেট নাল" সেট করেছিলাম। তোমাকে অনেক ধন্যবাদ.
অভিষেক সায়নী

আপনার সার্ভারে যদি আপনার অধিকার থাকে :(
ক্রিস্টোফার স্মিট

30

ডেটা ধরণের অবশ্যই মিলবে। যদি আপনি বার্চার প্রকারের সাথে কাজ করে থাকেন তবে টেবিলগুলিতে অবশ্যই একই সমষ্টি ব্যবহার করা উচিত।


4
কোলেশন বিটের জন্য ধন্যবাদ।
আরহান্ত

25

আমি মনে করি সঠিক থাকা অবস্থায় এই সমস্ত উত্তরগুলি প্রশ্নের বিভ্রান্তিকর।

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

SET FOREIGN_KEY_CHECKS=0;

কারণ প্রাকৃতিকভাবে পুনরুদ্ধারটি বিদেশী টেবিল এমনকি উপস্থিত থাকার আগে কিছু বাধা তৈরি করবে।


এটি করা আমার পক্ষে কাজ করে না, তবুও ত্রুটি দেয়। কোন ধারনা?
জোসেফ আস্ট্রাহান

24

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


ধন্যবাদ - এটি আমার সমস্যা ছিল।
scipilot

এটা আমার সমস্যা ছিল। ধন্যবাদ
thed0ctor

এটি যদি আপনি মাইএসকিলডাম্প ব্যবহার করে ইনোডাব টেবিলের একটি এসকিএল ফাইল তৈরি করেন এবং সেগুলি মাইসাম তাল্বের হিসাবে রপ্তানি করা হয় তবে এটি ঘটতে পারে।
আমাদো মার্টিনেজ

11

ত্রুটি নং। 150 এর অর্থ একটি বিদেশী কী বাধা ব্যর্থতা। আপনি সম্ভবত টেবিলের আগে এই টেবিলটি তৈরি করছেন বিদেশী কী নির্ভর করে (টেবিল)keywords ) । প্রথমে সেই টেবিলটি তৈরি করুন এবং এটি সূক্ষ্মভাবে কাজ করা উচিত।

যদি তা না হয় তবে বিদেশী কী বিবৃতিটি সরিয়ে ফেলুন এবং টেবিলটি তৈরি হওয়ার পরে এটি যুক্ত করুন - আপনি নির্দিষ্ট সীমাবদ্ধতার ব্যর্থতা সম্পর্কে আরও অর্থপূর্ণ ত্রুটি বার্তা পাবেন।


10

বেশ কয়েকটি জিনিস যা এর্নো 150 এর কারণ হতে পারে, তাই এই বিষয় অনুসন্ধান করা লোকদের জন্য, আমি মনে করি এটি সম্পূর্ণরূপের তালিকার নিকটবর্তী (উত্স কারণসমূহ এরনো 150) ):

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

1) ডেটা টাইপগুলি মেলে না: কলামগুলির ধরণগুলি একই রকম হতে হবে

2) মূল কলামগুলি সূচিযুক্ত নয় (বা ভুল ক্রমে সূচকযুক্ত)

3) কলামের মিলন মিলছে না

৪) একটি নট নাল কলামে নাল সেট করুন

5) সারণী কল্যাশনগুলি মিলছে না: কলামের কোলেশনগুলি মিললেও, কিছু মাইএসকিউএল সংস্করণে এটি সমস্যা হতে পারে।

6) পিতামাতার কলামটি পিতামাতার সারণীতে আসলে অস্তিত্ব রাখে না। বানান পরীক্ষা করুন (এবং সম্ভবত কলামের শুরুতে বা শেষে একটি স্থান)

)) কলামগুলির একটিতে সূচকের কোনওটি অসম্পূর্ণ, বা সম্পূর্ণ সূচির জন্য কলামটি দীর্ঘ। নোট করুন যে মাইএসকিউএল (আপনি যদি এটি টুইট করেন না) সর্বাধিক একক কলামের কী দৈর্ঘ্য 767 বাইট (এটি একটি ভারচারের সাথে মিলিত হয় (255) ইউটিএফ কলাম)

আপনি যদি 121 ত্রুটি পেয়ে থাকেন তবে এখানে কয়েকটি কারণ রয়েছে:

1) আপনি বাধা নামটি বেছে নিয়েছেন ইতিমধ্যে নেওয়া হয়েছে taken

2) কিছু সিস্টেমে যদি আপনার বিবৃতি এবং টেবিলের নামের ক্ষেত্রে কোনও পার্থক্য থাকে। আপনি যদি একটি সার্ভার থেকে অন্য সার্ভারে যান যা কেস হ্যান্ডলিংয়ের বিভিন্ন নিয়ম করে।


কিছু সংস্করণে আপনি এর্নো পাবেন 150 যদি টেবিলটি ইনসডাব না হয় তবে কিছু সংস্করণে এটি নিঃশব্দে ব্যর্থ হয়।
জুয়াকালা

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

8

কখনও কখনও মাইএসকিউএল কেবল বোকা - আমি বিদেশী-কীগুলির কারণ বুঝতে পারি .. তবে আমার ক্ষেত্রে, আমি পুরো ডাটাবেসটি সবেমাত্র ফেলে দিয়েছি এবং তবুও ত্রুটিটি পেয়েছি ... কেন? মানে, এখন আর কোনও ডাটাবেস নেই ... এবং যে স্কেল-ইউজারটি আমি ব্যবহার করছি তার সার্ভারে অন্য কোনও ডিবি'র অ্যাক্সেস নেই ... মানে, বর্তমান ব্যবহারকারীর জন্য সার্ভারটি "ফাঁকা" এবং আমি এখনও পেয়েছি এই ত্রুটি? দুঃখিত তবে আমি অনুমান করি যে মাইএসকিউএল আমার সাথে মিথ্যা কথা বলছে ... তবে আমি এটির সাথে মোকাবিলা করতে পারি :) কেবল আপনার দুষ্টু বিবৃতিতে এসকিউএলের এই দুটি লাইন যুক্ত করুন:

SET FOREIGN_KEY_CHECKS = 0;
# some code that gives you errno: 150
SET FOREIGN_KEY_CHECKS = 1;

এখন স্কুএলটি কার্যকর করা উচিত ... যদি আপনার সত্যিই কোনও বিদেশী-কী সমস্যা থাকে তবে এটি আপনাকে লাইনটি দিয়ে দেখিয়ে দেবে যেখানে আপনি আবার চেকগুলি সক্ষম করতে পারবেন - এটি তখন ব্যর্থ হবে .. তবে আমার সার্ভারটি ঠিক শান্ত আছে :)


এটি উল্লেখ করতে পারে যদি কলাম এবং কলামটির মধ্যে এটির উল্লেখ রয়েছে তবে সেখানে সমস্যা রয়েছে। এই ক্ষেত্রে. বলুন যে রেফারেন্সযুক্ত কলামটি একটি বারচর (200) এবং রেফারারটি বর্ণচর (50) হয়, তবে যখন একটি ক্যাসকেড চেষ্টা করা হয় তখন অদ্ভুত আচরণ হতে পারে। আমি ডেটা মেলেনি বলে কোন ইস্যুতে অংশ নিই না যেখানে 150 ইস্যু করা হয়েছে।
জুলাইকাল

আকর্ষণীয় অন্তর্দৃষ্টি @ জ্যুয়াকালা :) আমার কাছে মজার বিষয় কেবলমাত্র, যখনই আমি এটির দিকে ছুটে যাই, আমার পন্থাটি সর্বদা এটি স্থির করে ... কমপক্ষে আজ অবধি: ডি তবে আমরা শেখা কখনই বন্ধ করি না, ডান;)
জেব্বি

এটি আসলে আমাকে তৈরি স্ক্রিপ্টের তরল পদার্থে সহায়তা করেছিল। স্ক্রিপ্টটি মাইএসকিউএল> 5.5 এ নির্বিঘ্নে চলল, তবে সংস্করণ 5.1-এর জন্য ব্যর্থ হয়েছে।
delbertooo

4

উপরের উত্তরগুলি ক্রুজ করার পরে এবং কিছুটা পরীক্ষা করার পরে, এটি মাইএসকিউএল (1005 - ত্রুটি 150) এর বিদেশী কী ত্রুটিগুলি সমাধান করার কার্যকর উপায়।

বিদেশী কীটি সঠিকভাবে তৈরি করার জন্য, সমস্ত মাইএসকিউএল জিজ্ঞাসা করে:

  • সমস্ত রেফারেন্সযুক্ত কীগুলির প্রাথমিক বা ইউনিক ইনডেক্স থাকা আবশ্যক।
  • রেফারেন্সিং কলামে আবার উল্লেখযোগ্য কলামে অভিন্ন ডাটা টাইপ থাকা আবশ্যক।

এই প্রয়োজনীয়তাগুলি সন্তুষ্ট করুন এবং সব ঠিক থাকবে।


4

উইন্ডোজ অ্যাপ্লিকেশনটি লিনাক্সে পোর্ট করার সময় আমি এই ত্রুটিটি অনুভব করেছি। উইন্ডোজে ডাটাবেস টেবিলের নামগুলি কেস-সংবেদনশীল এবং লিনাক্সে সেগুলি কেস-সংবেদনশীল, সম্ভবত ফাইল সিস্টেমের পার্থক্যের কারণে। সুতরাং, উইন্ডোজ টেবিলের Table1মতো একই table1, এবং REFERENCESউভয়ই table1এবং Table1কাজ করে। লিনাক্সে, যখন ডেটাবেস কাঠামো তৈরি করার table1পরিবর্তে অ্যাপ্লিকেশনটি ব্যবহৃত হয় Table1তখন আমি ত্রুটি দেখতে পেয়েছিলাম # 150; আমি যখন Table1রেফারেন্সগুলিতে সঠিক চরিত্রের কেস তৈরি করি তখন এটি লিনাক্সেও কাজ শুরু করে। সুতরাং, যদি অন্য কোনও কিছুই সহায়তা না করে, তা নিশ্চিত করুন যে REFERENCESআপনি লিনাক্সে থাকাকালীন টেবিলের নামটিতে সঠিক চরিত্রের ক্ষেত্রে ব্যবহার করেছেন।


এটিও আমার ঘটনা ছিল! স্ক্রিপ্টটি কেস-সংবেদনশীল (ওএস এক্স) থেকে কেস-সংবেদনশীল মাইএসকিএল সংস্করণে (দেবিয়ান) সরিয়ে নেওয়া হচ্ছে।
মিরেসালুঙ্গু

3

আপনার টেবিলগুলির ইঞ্জিনগুলি পরিবর্তন করুন, কেবল নিষ্পাপডিবি বিদেশী কী সমর্থন করে


3

যদি পিকে টেবিলটি একটি অক্ষরে তৈরি করা হয় এবং তারপরে আপনি অন্য CHARSET এ এফকে টেবিল তৈরি করেন..এছাড়াও আপনি এই ত্রুটিটি পেয়ে যেতে পারেন ... আমিও এই ত্রুটি পেয়েছি তবে পি কে চরসেটে অক্ষর পরিবর্তন করার পরে এটি ত্রুটি ছাড়াই কার্যকর করা হয়েছিল

create table users
(
------------
-------------
)DEFAULT CHARSET=latin1;


create table Emp
(
---------
---------
---------
FOREIGN KEY (userid) REFERENCES users(id) on update cascade on delete cascade)ENGINE=InnoDB, DEFAULT CHARSET=latin1;

3

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


3

বেশিরভাগ ক্ষেত্রে সমস্যাটি ইঞ্জিন ডিফারেন্সের কারণে হয় the পিতামাতা যদি ইনোডিবি দ্বারা তৈরি হয় তবে রেফারেন্সড টেবিলগুলি মাইআইএসএএম দ্বারা তৈরি করা হবে এবং এর বিপরীতে supposed


3

আমার ক্ষেত্রে. ইঞ্জিন এবং চরসেট নিয়ে আমার সমস্যা হয়েছিল কারণ আমার হোস্টিং সার্ভারটি সেটিংস পরিবর্তন করে এবং আমার নতুন টেবিলগুলি মাইআইএসএএম ছিল তবে আমার পুরানো টেবিলগুলি ইনোডিবি। শুধু আমি পরিবর্তন।


এটি আমার পক্ষে ঠিক ছিল, কারণ আমি আমার দ্বারা তৈরি করা একটি ডেটাবেস পরিবর্তন করছিলাম।
ফোঞ্জটেক

3

সাধারণত, বিদেশী কী এবং প্রাথমিক কীগুলির মধ্যে অমিলটি ত্রুটির কারণ ঘটায়: 150।

ফরেইন কী একই থাকতে হবে ডাটাটাইপ হিসাবে প্রাথমিক কী । এছাড়াও, যদি প্রাথমিক কী হয় স্বাক্ষরবিহীন তারপর বিদেশী কী এছাড়াও হওয়া আবশ্যক স্বাক্ষরবিহীন


3

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


কেন আমি এই পোষ্টকে আগে দেখিনি !? আমি মূল কারণটি খুঁজে বের করতে এক ঘন্টা কাটিয়েছি। এটা আমার ক্ষেত্রে চরসেট ছিল। রেফারেন্স এবং রেফারেন্সিং টেবিলগুলিতে অবশ্যই একই চরসেট থাকতে হবে।
সুজিত জোশী

2

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


2

একটি আসল প্রান্ত কেস যেখানে আপনি একটি মাইএসকিউএল সরঞ্জাম, (আমার ক্ষেত্রে সিকুয়েল প্রো) ব্যবহার করেছেন একটি ডাটাবেসটির নাম পরিবর্তন করতে। তারপরে একই নাম দিয়ে একটি ডাটাবেস তৈরি করে।

এটি একই ডাটাবেসের নামের সাথে বিদেশী কী বাধা রক্ষা করে, তাই নতুন নামক ডাটাবেসে (উদাঃ my_db_renamed) নতুন তৈরি ডাটাবেসে বিদেশী কী বাধা ছিল (my_db)

সিকুয়েল প্রোতে এটি কোনও বাগ কিনা তা নিশ্চিত নয় বা কোনও ব্যবহারের ক্ষেত্রে যদি এই আচরণের প্রয়োজন হয় তবে এটি আমার জন্য সকালের সবচেয়ে ভাল অংশে ব্যয় করে: /


2

আমারও ত্রুটি ছিল আমার ক্ষেত্রে ত্রুটির কারণ হ'ল আমার সীমাবদ্ধতার মধ্যে আমার একটি মুছে ফেলা সমাপ্ত নাল স্টেটমেন্ট ছিল যখন আমি যে ক্ষেত্রের উপর আমি তার সংজ্ঞাটিতে সীমাবদ্ধতা রেখেছিলাম সে ক্ষেত্রে একটি নাল বিবৃতি ছিল না। NUL কে ক্ষেত্রের অনুমতি দেওয়া সমস্যার সমাধান করেছে।


2

পাঠ্য ফাইল থেকে ডিবি তৈরি করার সময় আমি এই ধরণের সমস্যার মুখোমুখি হয়েছি।

mysql -uroot -padmin < E:\important\sampdb\createdb.sql
mysql -uroot -padmin sampdb < E:\important\sampdb\create_student.sql
mysql -uroot -padmin sampdb < E:\important\sampdb\create_absence.sql

mysql -uroot -padmin sampdb < E:\important\sampdb\insert_student.sql
mysql -uroot -padmin sampdb < E:\important\sampdb\insert_absence.sql

mysql -uroot -padmin sampdb < E:\important\sampdb\load_student.sql
mysql -uroot -padmin sampdb < E:\important\sampdb\load_absence.sql 

আমি কেবল উপরের লাইনগুলিতে লিখেছি Create.bat ব্যাট ফাইলটি চালিয়েছি।

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

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


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

2

আমার অনুরূপ সমস্যা ছিল তবে আমার কারণটি ছিল যে আমি বিদ্যমান সারণীতে একটি নতুন ক্ষেত্র যুক্ত করেছিলাম যার সাথে ডেটা ছিল এবং নতুন ক্ষেত্রটি প্যারেন্ট টেবিল থেকে অন্য ক্ষেত্রটি রেফারেন্স করছিল এবং নট নাল এর সংজ্ঞাও ছিল এবং কোনও ত্রুটিযুক্ত মূল্য ছাড়াই। - আমি জিনিসগুলি কাজ না করার কারণটি খুঁজে পেয়েছিলাম কারণ

  1. সীমাবদ্ধতা প্রয়োগের আগে, আমার নতুন ক্ষেত্রটি প্রতিটি রেকর্ডে প্যারেন্ট টেবিলের একটি মান সহ ফাঁকা ক্ষেত্রগুলি স্বয়ংক্রিয়ভাবে পূরণ করতে হবে। প্রতিবার প্রতিবন্ধকতা প্রয়োগ করা হলে টেবিলের ডেটাটির সততা অক্ষত রাখতে হবে। সীমাবদ্ধতা (বৈদেশিক কী) প্রয়োগ করে এখনও কিছু ডাটাবেস রেকর্ড রয়েছে যার পিতামাতার সারণির মানগুলি না থেকে ডেটাটি দূষিত হওয়ার অর্থ হ'ল মাইএসকিউএল আপনার সংস্থাগুলিকে কখনও প্রসারিত করবে না

এটি মনে রাখা গুরুত্বপূর্ণ যে আপনি যদি আপনার ডেটাবেসকে সময়ের আগে ভালভাবে পরিকল্পনা করেন এবং ডেটা সন্নিবেশের আগে সীমাবদ্ধতাগুলি কার্যকর করেন তবে এই নির্দিষ্ট পরিস্থিতি এড়ানো সম্ভব হবে remember

এই গ্যাচচা এড়াতে সহজ পন্থা হ'ল

  • আপনার ডাটাবেস সারণী ডেটা সংরক্ষণ করুন
  • টেবিলের ডেটা (এবং টেবিলের নিদর্শনগুলি যেমন সূচী ইত্যাদি) কেটে দিন
  • সীমাবদ্ধতা প্রয়োগ করুন
  • আপনার ডেটা আমদানি করুন

আমি আশা করি এটা কারো সাহায্যে লাগবে


1

সম্ভবত এই সাহায্য করবে? প্রাথমিক কী কলামটির সংজ্ঞা বিদেশী কী কলামের মতোই হওয়া উচিত।


1

নিশ্চিত হয়ে নিন যে সমস্ত টেবিল বিদেশী কী সমর্থন করতে পারে - InnoDB ইঞ্জিন


1

সন্তানের টেবিল থেকে আপনি যে প্যারেন্ট টেবিলটির উল্লেখ করছেন সেটি অনন্য হতে হবে। যদি তা না হয় তবে 150 টির ত্রুটি ঘটান।


এটি সম্ভবত আপনার আরও কিছুটা বিশদ যোগ করার উপযুক্ত হবে - উদাহরণস্বরূপ নির্দিষ্ট কলাম এবং টেবিলের নামগুলি
জোনাথন

1

একটি টেবিলে জ্যাঙ্গো মাইএসকিএল ডাটাবেস ডাম্প করার সময় আমারও একই সমস্যা হয়েছিল similar আমি একটি টেক্সট ফাইলে ডাটাবেস ডাম্প করে, প্রশ্নটির টেবিলটি ইমাস ব্যবহার করে ফাইলের শেষে সরিয়ে নিয়েছি এবং পরিবর্তিত এসকিএল ডাম্প ফাইলটিকে নতুন উদাহরণে আমদানি করে সমস্যার সমাধান করতে সক্ষম হয়েছি।

এইচটিএইচ উওয়ে


1

আমি ভেরিয়েবলটি গ্রহণ করে সমস্যাটি সংশোধন করেছি null

ALTER TABLE `ajout_norme` 
CHANGE `type_norme_code` `type_norme_code` VARCHAR( 2 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL

1

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

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


1

বিদেশী কী ছাড়াই টেবিলটি তৈরি করুন, তারপরে বিদেশী কী আলাদাভাবে সেট করুন।

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