मैंने इसे mysql में आज़माया:
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 में आज़माया:
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 इंजन का उपयोग करती हैं, तो आपको आमतौर पर यह त्रुटि मिलती है। उस स्थिति में आपको विदेशी कुंजी को छोड़ना होगा, और फिर तालिका को बदलकर कॉलम को छोड़ना होगा।
लेकिन मुश्किल हिस्सा यह है कि आप कॉलम नाम का उपयोग करके विदेशी कुंजी को नहीं छोड़ सकते हैं, बल्कि आपको इसे इंडेक्स करने के लिए उपयोग किया गया नाम ढूंढना होगा। इसे खोजने के लिए, निम्नलिखित चयन जारी करें:
शो टेबल टेबल क्षेत्र;
यह आपको सूचकांक का नाम, कुछ इस तरह दिखाना चाहिए:
CONSTRAINT
region_ibfk_1
विदेशी कुंजी (country_id
) संदर्भcountry
( )id
) अद्यतन संख्या पर अद्यतन कोई कार्रवाई नहीं
अब बस जारी करें:
परिवर्तन तालिका क्षेत्र ड्रॉप विदेशी कुंजी
region_ibfk_1
;
और अंत में एक:
परिवर्तन तालिका क्षेत्र ड्रॉप कॉलम देश_id;
और आप जाने के लिए अच्छे हैं!
यह वास्तव में एक विदेशी त्रुटि है, आप पेरोर का उपयोग करके पता लगा सकते हैं:
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
क्या विफल हुआ, इसके बारे में अधिक जानकारी प्राप्त करने के लिए, आप उपयोग कर सकते हैं SHOW ENGINE INNODB STATUS
और नवीनतम फॉरेस्ट कुंजी त्रुटि अनुभाग की तलाश कर सकते हैं जिसमें गलत है।
आपके मामले में, यह सबसे अधिक कारण है कि कुछ देश का उल्लेख कर रहा है_ कॉलम
आप इस त्रुटि को गैर-मौजूदा विदेशी कुंजी को छोड़ने की कोशिश में भी प्राप्त कर सकते हैं। इसलिए विदेशी कुंजियों को छोड़ते समय, हमेशा सुनिश्चित करें कि वे वास्तव में मौजूद हैं।
यदि विदेशी कुंजी मौजूद है, और आपको अभी भी यह त्रुटि मिल रही है, तो निम्नलिखित प्रयास करें:
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;
यह हमेशा मेरे लिए चाल है :)
बस ड्रॉप स्टेटमेंट में 'FOREIGN KEY' के बजाय 'KEY' का उपयोग करके परिवर्तन तालिका क्वेरी चलाएँ। मुझे उम्मीद है कि यह मुद्दे को हल करने में मदद करेगा, और विदेशी कुंजी बाधा को छोड़ देगा और आप तालिका कॉलम को बदल सकते हैं और तालिका को छोड़ सकते हैं।
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;
आपके प्रयास से शुभकामनाएँ।
मैं एक बार इसी तरह के मुद्दों था। मैंने TABLE A से प्राथमिक कुंजी को हटा दिया था, लेकिन जब मैं तालिका BI से विदेशी कुंजी स्तंभ को हटाने का प्रयास कर रहा था, तो उपरोक्त त्रुटि दिखाई गई थी।
आप स्तंभ नाम का उपयोग करके और PHPMyAdmin में या MySQL के साथ इसे बायपास करने के लिए विदेशी कुंजी को नहीं छोड़ सकते हैं, पहले विशेषता को बदलने या हटाने से पहले विदेशी कुंजी बाधा को हटा दें।
अपने mysql डेटाबेस के लिए त्रुटि फ़ाइल पर एक नज़र डालें। बग # 26305 के अनुसार मेरा वर्ग आपको कारण नहीं देता है। MySQL 4.1 ;-) के बाद से यह बग मौजूद है
यदि आप MySQL वर्कबेंच जैसे क्लाइंट का उपयोग कर रहे हैं, तो वांछित तालिका पर राइट क्लिक करें जहां से एक विदेशी कुंजी को हटाना है, फिर विदेशी कुंजी टैब का चयन करें और अनुक्रमित को हटा दें।
फिर आप क्वेरी को इस तरह से चला सकते हैं:
alter table table_name drop foreign_key_col_name;
एक मुख्य कुंजी के साथ शायद एक और तालिका है जिसमें आप जिस प्राथमिक कुंजी को बदलने का प्रयास कर रहे हैं।
यह पता लगाने के लिए कि किस तालिका में त्रुटि हुई है जिसे आप चला सकते हैं SHOW ENGINE INNODB
STATUS
और फिर LATEST FOREIGN KEY ERROR
अनुभाग देखें
बाधा के नाम को दिखाने के लिए SHOW CREATE TABLE श्रेणियों का उपयोग करें।
सबसे अधिक संभवत: यह श्रेणियां_ibfk_1 होंगी
पहले विदेशी कुंजी को छोड़ने के लिए नाम का उपयोग करें और फिर कॉलम:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
करते हुए
SET FOREIGN_KEY_CHECKS=0;
ऑपरेशन से पहले चाल भी कर सकते हैं।
मुझे लगता है कि विदेशी प्रमुख बाधा समस्या होगी। क्या Country_id को किसी अन्य तालिका में एक विदेशी कुंजी के रूप में उपयोग किया जाता है?
मैं डीबी गुरु नहीं हूं, लेकिन मुझे लगता है कि मैंने इस तरह की समस्या को हल किया (जहां एक fk अड़चन थी) fk को हटाकर, मेरी परिवर्तन तालिका सामग्री को करना और फिर fk सामान को फिर से करना।
मुझे यह सुनने में दिलचस्पी होगी कि परिणाम क्या है - कभी-कभी mysql बहुत गूढ़ होता है।
मेरे मामले में, मैं MySQL कार्यक्षेत्र का उपयोग कर रहा था और मैंने अपने किसी कॉलम को तालिका में छोड़ने के दौरान उसी समस्या का सामना किया था। मुझे विदेशी कुंजी का नाम नहीं मिला। मैंने समस्या को हल करने के लिए निम्नलिखित चरणों का पालन किया:
Rt। अपने स्कीमा पर क्लिक करें और 'स्कीमा इंस्पेक्टर' चुनें। यह आपको विभिन्न टेबल, कॉलम, इंडेक्स, ect प्रदान करता है।
'Indexes' नाम के टैब पर जाएं और कॉलम के नाम के नीचे 'Column' नाम खोजें। एक बार स्तंभ नाम 'तालिका' के तहत इस रिकॉर्ड के लिए तालिका का नाम जांचें। यदि यह आपके इच्छित तालिका के नाम से मेल खाता है, तो 'नाम' नामक कॉलम से विदेशी कुंजी का नाम नोट करें।
अब क्वेरी निष्पादित करें: ALTER टेबल टेबलनाम XXX DROP KEY विदेशीकेनाम;
अब आप ड्रॉप स्टेटमेंट को निष्पादित कर सकते हैं जो सफलतापूर्वक निष्पादित होगा।
मुझे MySQL 5.6 के साथ यह त्रुटि मिली लेकिन इसका विदेशी चाबियों से कोई लेना-देना नहीं था। यह एक छोटे लैन पर सर्वर के रूप में कार्य करने वाली विंडोज 7 प्रोफेशनल मशीन पर था।
क्लाइंट एप्लिकेशन बैच ऑपरेशन कर रहा था जो एक टेबल बनाता है इसे कुछ बाहरी डेटा से भरता है फिर एक क्वेरी को स्थायी तालिकाओं के साथ जोड़ देता है और फिर "अस्थायी" टेबल को छोड़ देता है। यह बैच लगभग 300 बार करता है और यह विशेष दिनचर्या कई वर्षों से सप्ताह में एक सप्ताह चल रही थी जब अचानक हमें बैच में यादृच्छिक बिंदु पर समस्या का नाम बदलने में त्रुटि 1025 असमर्थ हो जाती है।
मेरे मामले में आवेदन 4 डीडीएल बयानों का उपयोग कर रहा था एक सृजन तालिका 3 क्रिएट इंडेक्स के बाद, कोई विदेशी कुंजी नहीं है। हालाँकि अनुक्रमणिका के केवल 2 वास्तव में निर्मित होते हैं और वास्तविक तालिका .frm फ़ाइल का नाम बदला गया था, विफलता के बिंदु पर।
मेरा समाधान अलग-अलग क्रिएट इंडेक्स स्टेटमेंट से छुटकारा पाने और क्रिएट टेबल स्टेटमेंट का उपयोग करके उन्हें बनाना था। लेखन के समय इसने मेरे लिए समस्या को हल कर दिया है और मेरी मदद किसी और को यह धागा मिलने पर अपना सिर खुजाने में होती है।
averageRatings = FOREACH समूहीकृत समूह के रूप में उत्पन्न समूह , चलचित्र, AVG (रेटिंगसट्रेटिंग) AS avgRating, COUNT (रेटिंग के रूप में) अंकन के रूप में;
यदि आप ऊपर दिए गए किसी आदेश का उपयोग कर रहे हैं तो आपको छोटे अक्षरों में समूह का उपयोग करना चाहिए। इससे आपकी समस्या का समाधान हो सकता है। कम से कम PIG स्क्रिप्ट में।