আমি এটি মাইএসকিএলে চেষ্টা করেছি:
mysql> alter table region drop column country_id;
এবং এটি পেয়েছি:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
কোন ধারনা? বিদেশী কী স্টাফ?
আমি এটি মাইএসকিএলে চেষ্টা করেছি:
mysql> alter table region drop column country_id;
এবং এটি পেয়েছি:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
কোন ধারনা? বিদেশী কী স্টাফ?
উত্তর:
যদি আপনার টেবিলগুলি InnoDB ইঞ্জিন ব্যবহার করে তবে আপনি সাধারণত এই ত্রুটিটি পান। সেক্ষেত্রে আপনাকে বিদেশী কীটি ফেলে দিতে হবে, এবং তারপরে পরিবর্তিত টেবিলটি করতে হবে এবং কলামটি ড্রপ করতে হবে।
তবে জটিল অংশটি হ'ল আপনি কলামের নামটি ব্যবহার করে বিদেশী কীটি ফেলে দিতে পারবেন না, পরিবর্তে আপনাকে এটি সূচী করতে ব্যবহৃত নামটি সন্ধান করতে হবে। এটির জন্য, নিম্নলিখিত নির্বাচনটি ইস্যু করুন:
টেবিল অঞ্চল তৈরি করুন;
এটি আপনাকে সূচকের নামটি প্রদর্শন করবে, এরকম কিছু:
বাধ্যতা
region_ibfk_1
অজানা কী (country_id
) তথ্যসূত্রcountry
(id
) ডিলিট কোনো পদক্ষেপ আপডেট কোনো পদক্ষেপ
এখন কেবল একটি ইস্যু করুন:
টেবিল অঞ্চল পরিবর্তন বিদেশী কী ড্রপ
region_ibfk_1
;
এবং অবশেষে একটি:
টেবিল অঞ্চল ড্রপ কলাম দেশ_আইডি পরিবর্তন;
এবং আপনি যেতে ভাল!
এটি প্রকৃতপক্ষে একটি বিদেশী কী ত্রুটি, আপনি পেরের ব্যবহার করে খুঁজে বের করতে পারেন:
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
কী ব্যর্থ হয়েছে সে সম্পর্কে আরও বিশদ অনুসন্ধান করার জন্য, আপনি SHOW ENGINE INNODB STATUS
সর্বশেষ বিদেশী কী ত্রুটিটি ব্যবহার করতে পারেন এবং এটিতে কী কী ভুল রয়েছে তার বিশদ রয়েছে contains
আপনার ক্ষেত্রে, এটি সম্ভবত কিছু কারণ দেশ_দ্বীপ কলাম উল্লেখ করছে।
অ-বিদ্যমান বিদেশী কী বাদ দেওয়ার চেষ্টা করেও আপনি এই ত্রুটিটি পেতে পারেন। সুতরাং বিদেশী কীগুলি ফেলে দেওয়ার সময়, সর্বদা নিশ্চিত হন যে সেগুলি আসলে আছে।
যদি বিদেশী কী উপস্থিত থাকে এবং আপনি এখনও এই ত্রুটিটি পেয়ে যাচ্ছেন তবে নীচের চেষ্টা করুন:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
// বিদেশী কী এখানে ফেলে দিন!
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
এটি সর্বদা আমার জন্য কৌশলটি করে :)
ড্রপ স্টেটমেন্টে 'ফরেন কি' এর পরিবর্তে 'কেই' ব্যবহার করে অলরেডি টেবিলের ক্যোয়ারীটি চালান। আমি আশা করি এটি সমস্যা সমাধানে সহায়তা করবে এবং বিদেশী কী সীমাবদ্ধতা ফেলে দেবে এবং আপনি সারণী কলামগুলি পরিবর্তন করতে এবং টেবিলটি ফেলে দিতে পারেন।
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
DROP KEY
পরিবর্তে এখানে DROP FOREIGN KEY
,
আশা করি এটি সাহায্য করবে
ধন্যবাদ
আমি জানি, এটি একটি পুরানো পোস্ট, তবে যদি আপনি 1025 ত্রুটি খুঁজছেন তবে এটি সবার পছন্দের সার্চ ইঞ্জিনে প্রথম হিট।
তবে এই সমস্যাটি সমাধানের জন্য একটি সহজ "হ্যাক" রয়েছে:
আপনার কমান্ড (গুলি) কার্যকর করার আগে আপনাকে প্রথমে এই কমান্ডটি ব্যবহার করে বিদেশী কী সীমাবদ্ধতাগুলি পরীক্ষা করতে হবে:
SET FOREIGN_KEY_CHECKS = 0;
তারপরে আপনি আপনার আদেশ (গুলি) কার্যকর করতে সক্ষম হবেন।
আপনার কাজ শেষ হওয়ার পরে, এই আদেশটি ব্যবহার করে আবার বিদেশী কী সীমাবদ্ধতাগুলি পরীক্ষা করতে সক্ষম করবেন না:
SET FOREIGN_KEY_CHECKS = 1;
আপনার প্রচেষ্টা দিয়ে শুভকামনা।
আমারও একবার একই রকম সমস্যা ছিল। আমি টেবিল এ থেকে প্রাথমিক কীটি মুছলাম কিন্তু যখন আমি টেবিল বিআই থেকে বিদেশী কী কলামটি মুছার চেষ্টা করছিলাম তখন উপরের একই ত্রুটি দেখানো হয়েছিল।
আপনি কলামের নামটি ব্যবহার করে এবং পিএইচপিএমওয়াই অ্যাডমিনে বা মাইএসকিউএলকে বাইপাস করতে বিদেশী কীটি সরিয়ে ফেলতে পারবেন না, প্রথমে বৈশিষ্ট্যটির নামকরণ বা মুছার আগে বিদেশী কী সীমাবদ্ধতা সরিয়ে ফেলুন।
আপনার মাইএসকিএল ডাটাবেসের জন্য ত্রুটি ফাইলটি একবার দেখুন। বাগ # 26305 অনুসারে আমার স্কয়ার আপনাকে কারণ দেয় না। এই বাগটি মাইএসকিউএল ৪.১ ;-) থেকে রয়েছে
আপনি যদি মাইএসকিউএল ওয়ার্কবেঞ্চের মতো ক্লায়েন্ট ব্যবহার করছেন তবে বিদেশী কী মুছতে হবে সেখান থেকে পছন্দসই টেবিলটি ডান ক্লিক করুন, তারপরে বিদেশী কী ট্যাবটি নির্বাচন করুন এবং সূচিগুলি মুছুন।
তারপরে আপনি কোয়েরিটি এভাবে চালাতে পারেন:
alter table table_name drop foreign_key_col_name;
আপনি যে প্রাথমিক কীটি পরিবর্তন করার চেষ্টা করছেন তা উল্লেখ করে বিদেশী কী সহ আরও একটি টেবিল রয়েছে।
কোন টেবিলটি ত্রুটি সৃষ্টি করেছে তা অনুসন্ধান করতে আপনি চালাতে পারেন SHOW ENGINE INNODB
STATUS
এবং তারপরে LATEST FOREIGN KEY ERROR
বিভাগটি দেখুন
সীমাবদ্ধতার নাম দেখানোর জন্য টেবিল প্রদর্শন করুন তৈরি করুন।
সম্ভবত এটি বিভাগ_আইবিএফকে_1 হবে
প্রথমে বিদেশী কী এবং তারপরে কলামটি নামাতে নামটি ব্যবহার করুন:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
এরকম
SET FOREIGN_KEY_CHECKS=0;
অপারেশন আগে কৌতুক করতে পারেন।
আমি বিদেশী কী বাধা সমস্যা অনুমান করব। দেশ_আইডি কি অন্য টেবিলে বিদেশী কী হিসাবে ব্যবহৃত হয়?
আমি ডিবি গুরু নই তবে আমার মনে হয় আমি এফকে সরিয়ে, আমার টেবিলের জিনিসগুলি পরিবর্তন করে এবং তারপরে fk স্টাফগুলি পুনরায় করে এই জাতীয় সমস্যাটি সমাধান করেছি (যেখানে কোনও fk বাধা ছিল)।
ফলাফলটি কী তা আমি শুনতে আগ্রহী - কোনও কোনও সময় মাইএসকিএল বেশ রহস্যজনক।
আমার ক্ষেত্রে, আমি মাইএসকিউএল ওয়ার্কবেঞ্চ ব্যবহার করছিলাম এবং আমার একটি কলাম একটি টেবিলের মধ্যে ফেলে দেওয়ার সময় আমি একই সমস্যার মুখোমুখি হয়েছিলাম। বিদেশী চাবিটির নামটি খুঁজে পেলাম না। আমি সমস্যাটি সমাধানের জন্য নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করেছি:
RT। আপনার স্কিমাতে ক্লিক করুন এবং 'স্কিমা পরিদর্শক' নির্বাচন করুন। এটি আপনাকে বিভিন্ন সারণী, কলাম, সূচী, ect দেয়।
'সূচকগুলি' নামের ট্যাবে যান এবং 'কলাম' নামক কলামের অধীনে কলামটির নাম অনুসন্ধান করুন। একবার খুঁজে পাওয়া গেলে এই রেকর্ডটির জন্য টেবিলের নামটি 'টেবিল' কলামের অধীনে পরীক্ষা করুন। এটি যদি আপনি চান সারণীর নামের সাথে মিলে যায়, তবে 'নাম' নামক কলামটি থেকে বিদেশী কীটির নামটি নোট করুন।
এখন কোয়েরিটি সম্পাদন করুন: টেবিলের টেবিলনেমেক্সএক্সএক্সএক্সএক্স ড্রপ কী বিদেশিকি নাম;
এখন আপনি ড্রপ স্টেটমেন্ট কার্যকর করতে পারবেন যা সফলভাবে কার্যকর হবে।
আমি এই ত্রুটিটি মাইএসকিউএল 5.6 এর সাথে পেয়েছি তবে বিদেশী কীগুলির সাথে এর কোনও যোগসূত্র নেই। এটি একটি উইন্ডোজ 7 পেশাদার মেশিনে ছিল একটি ছোট ল্যানে সার্ভার হিসাবে অভিনয় করে।
ক্লায়েন্ট অ্যাপ্লিকেশনটি একটি ব্যাচ অপারেশন করছিল যা একটি টেবিল তৈরি করে এটি কিছু বাহ্যিক ডেটা পূরণ করে তারপরে স্থায়ী টেবিলগুলির সাথে যোগ দিয়ে একটি কোয়েরি চালায় তারপর "অস্থায়ী" টেবিলটি বাদ দেয়। এই ব্যাচটি এটি প্রায় 300 বার করে এবং এই নির্দিষ্ট রুটিনটি কয়েক সপ্তাহ ধরে সপ্তাহে চলে আসছিল যখন হঠাৎ আমরা ত্রুটিটি পেয়েছিলাম 1025 ব্যাচের একটি এলোমেলো পয়েন্টে সমস্যার নাম পরিবর্তন করতে অক্ষম।
আমার ক্ষেত্রে অ্যাপ্লিকেশনটি 4 ডিডিএল স্টেটমেন্ট ব্যবহার করছে একটি ক্রিয়েট টেবিল এবং তারপরে 3 ক্রিয়েট ইন্ডেক্স, কোনও বিদেশী কী নেই। তবে সূচকের মাত্র 2 টি তৈরি হয়ে গেছে এবং ব্যর্থতার সময়ে প্রকৃত সারণী .frm ফাইলটির নাম পরিবর্তন করা হয়েছিল re
আমার সমাধানটি ছিল পৃথক ক্রেইট সূচক বিবৃতিগুলি থেকে মুক্তি এবং ক্রিয়েট টেবিল স্টেটমেন্ট ব্যবহার করে সেগুলি তৈরি করা। লেখার সময় এটি আমার জন্য সমস্যা সমাধান করেছে এবং অন্য কেউ যখন এই থ্রেডটি খুঁজে পান তাদের মাথা আঁচড়ান।
গড় রেটিংগুলি = পূর্বে গোষ্ঠীভুক্ত রেটিংগুলি জেনারেট গ্রুপ হিসাবে মুভিআইআইডি, এভিজি (রেটিং.রেটিং) যেমন গড় রেটিং, COUNT (রেটিং.রেটিং) এএসএসের রেটিং;
আপনি যদি উপরের মতো কোনও কমান্ড ব্যবহার করে থাকেন তবে আপনাকে অবশ্যই ছোট অক্ষরে গ্রুপ ব্যবহার করতে হবে। এটি আপনার সমস্যার সমাধান করতে পারে এটি আমার সমাধান হয়েছে। কমপক্ষে পিআইজি স্ক্রিপ্টে।