Mysql 1025 (HY000) में क्या त्रुटि है: './foo' (त्रुटिपूर्ण: 150) का नाम बदलने में त्रुटि?


160

मैंने इसे 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)

कोई विचार? विदेशी कुंजी सामान?


@skiphoppy - क्या आप पहले से दिए गए उत्तर के लिए एक इनाम देने की कोशिश कर रहे हैं? क्या इसकी भी अनुमति है? या आपका मामला अलग है, किस मामले में आपको एक और धागा शुरू करना चाहिए?
रिक जेम्स

@ रिकजम्स हां यह है। हालांकि, स्किप्होपी को अपने जवाब के तहत अपनी टिप्पणी को जोड़ना चाहिए, क्योंकि बाउंटी खत्म होने पर बाउटी संदेश गायब हो जाएगा।
रैंडमसाइड

जवाबों:


240

यदि आपकी तालिकाएँ InnoDB इंजन का उपयोग करती हैं, तो आपको आमतौर पर यह त्रुटि मिलती है। उस स्थिति में आपको विदेशी कुंजी को छोड़ना होगा, और फिर तालिका को बदलकर कॉलम को छोड़ना होगा।

लेकिन मुश्किल हिस्सा यह है कि आप कॉलम नाम का उपयोग करके विदेशी कुंजी को नहीं छोड़ सकते हैं, बल्कि आपको इसे इंडेक्स करने के लिए उपयोग किया गया नाम ढूंढना होगा। इसे खोजने के लिए, निम्नलिखित चयन जारी करें:

शो टेबल टेबल क्षेत्र;

यह आपको सूचकांक का नाम, कुछ इस तरह दिखाना चाहिए:

CONSTRAINT region_ibfk_1विदेशी कुंजी ( country_id) संदर्भ country( ) id ) अद्यतन संख्या पर अद्यतन कोई कार्रवाई नहीं

अब बस जारी करें:

परिवर्तन तालिका क्षेत्र ड्रॉप विदेशी कुंजी region_ibfk_1;

और अंत में एक:

परिवर्तन तालिका क्षेत्र ड्रॉप कॉलम देश_id;

और आप जाने के लिए अच्छे हैं!


ध्यान दें कि आप विदेशी कुंजी और कॉलम को एक से अधिक टेबल क्वेरी में भी छोड़ सकते हैं;
वैलेंटाइन ग्रेजायर

अच्छा! हमें विदेशी कुंजी छोड़नी चाहिए, सब कुछ ठीक हो जाएगा! धन्यवाद!
लुआन डी

173

यह वास्तव में एक विदेशी त्रुटि है, आप पेरोर का उपयोग करके पता लगा सकते हैं:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

क्या विफल हुआ, इसके बारे में अधिक जानकारी प्राप्त करने के लिए, आप उपयोग कर सकते हैं SHOW ENGINE INNODB STATUSऔर नवीनतम फॉरेस्ट कुंजी त्रुटि अनुभाग की तलाश कर सकते हैं जिसमें गलत है।

आपके मामले में, यह सबसे अधिक कारण है कि कुछ देश का उल्लेख कर रहा है_ कॉलम


2
फिर से, एक और भ्रामक MySQL ने त्रुटि प्रदर्शित की ... धन्यवाद।
e2-e4

PhpMyAdmin में, आप Storage Engines , InnoDB , InnoDB Status
Maxence

15

आप इस त्रुटि को गैर-मौजूदा विदेशी कुंजी को छोड़ने की कोशिश में भी प्राप्त कर सकते हैं। इसलिए विदेशी कुंजियों को छोड़ते समय, हमेशा सुनिश्चित करें कि वे वास्तव में मौजूद हैं।

यदि विदेशी कुंजी मौजूद है, और आपको अभी भी यह त्रुटि मिल रही है, तो निम्नलिखित प्रयास करें:

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;

यह हमेशा मेरे लिए चाल है :)


1
एक mysql त्रुटि के कारण तालिका के किसी भिन्न वर्ण सेट पर स्विच करने के दौरान मुझे इसकी आवश्यकता थी: ERROR 1025 (HY000): '/ ./table/#sql-14ae_81' का नाम बदलने में त्रुटि (ग़लती: 150)
letjump

7

बस ड्रॉप स्टेटमेंट में 'FOREIGN KEY' के बजाय 'KEY' का उपयोग करके परिवर्तन तालिका क्वेरी चलाएँ। मुझे उम्मीद है कि यह मुद्दे को हल करने में मदद करेगा, और विदेशी कुंजी बाधा को छोड़ देगा और आप तालिका कॉलम को बदल सकते हैं और तालिका को छोड़ सकते हैं।

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

यहाँ के DROP KEYबजाय में DROP FOREIGN KEY,

आशा है कि यह मदद करेगा।

धन्यवाद


4

मुझे पता है, यह एक पुरानी पोस्ट है, लेकिन यह हर किसी के पसंदीदा खोज इंजन पर पहली हिट है यदि आप त्रुटि 1025 की तलाश कर रहे हैं।

हालाँकि, इस समस्या को हल करने के लिए एक आसान "हैक" है:

इससे पहले कि आप अपनी कमांड निष्पादित करें, आपको पहले इस कमांड का उपयोग करके विदेशी कुंजी बाधाओं की जांच को अक्षम करना होगा:

SET FOREIGN_KEY_CHECKS = 0;

तब आप अपनी कमांड निष्पादित कर सकते हैं।

आपके द्वारा किए जाने के बाद, इस आदेश का उपयोग करते हुए, विदेशी प्रमुख बाधाओं को फिर से सक्षम करने के लिए मत भूलना:

SET FOREIGN_KEY_CHECKS = 1;

आपके प्रयास से शुभकामनाएँ।


Xampp पर ऑक्टोबेर्म्स स्थापित करने में समस्या हो रही थी, आखिरकार इससे मदद मिली।
जहकबेथ

2

मैं एक बार इसी तरह के मुद्दों था। मैंने TABLE A से प्राथमिक कुंजी को हटा दिया था, लेकिन जब मैं तालिका BI से विदेशी कुंजी स्तंभ को हटाने का प्रयास कर रहा था, तो उपरोक्त त्रुटि दिखाई गई थी।

आप स्तंभ नाम का उपयोग करके और PHPMyAdmin में या MySQL के साथ इसे बायपास करने के लिए विदेशी कुंजी को नहीं छोड़ सकते हैं, पहले विशेषता को बदलने या हटाने से पहले विदेशी कुंजी बाधा को हटा दें।


1

अपने mysql डेटाबेस के लिए त्रुटि फ़ाइल पर एक नज़र डालें। बग # 26305 के अनुसार मेरा वर्ग आपको कारण नहीं देता है। MySQL 4.1 ;-) के बाद से यह बग मौजूद है


मुझे आपके कुछ उत्तर का पालन करना कठिन लगा, लेकिन एक बग रिपोर्ट से लिंक करने के लिए +1। जाहिर है, यह अब MySQL v5.6.6 में तय किया गया है। :)
mwfearnley

1

यदि आप MySQL वर्कबेंच जैसे क्लाइंट का उपयोग कर रहे हैं, तो वांछित तालिका पर राइट क्लिक करें जहां से एक विदेशी कुंजी को हटाना है, फिर विदेशी कुंजी टैब का चयन करें और अनुक्रमित को हटा दें।

फिर आप क्वेरी को इस तरह से चला सकते हैं:

alter table table_name drop foreign_key_col_name;

1

एक मुख्य कुंजी के साथ शायद एक और तालिका है जिसमें आप जिस प्राथमिक कुंजी को बदलने का प्रयास कर रहे हैं।

यह पता लगाने के लिए कि किस तालिका में त्रुटि हुई है जिसे आप चला सकते हैं 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;


0

मुझे लगता है कि विदेशी प्रमुख बाधा समस्या होगी। क्या Country_id को किसी अन्य तालिका में एक विदेशी कुंजी के रूप में उपयोग किया जाता है?

मैं डीबी गुरु नहीं हूं, लेकिन मुझे लगता है कि मैंने इस तरह की समस्या को हल किया (जहां एक fk अड़चन थी) fk को हटाकर, मेरी परिवर्तन तालिका सामग्री को करना और फिर fk सामान को फिर से करना।

मुझे यह सुनने में दिलचस्पी होगी कि परिणाम क्या है - कभी-कभी mysql बहुत गूढ़ होता है।


मैसूरल भयानक हो सकता है। आम तौर पर अच्छा है, लेकिन उन त्रुटि संदेश, शीश। यदि हमें कार्यालय में किसी से संक्षिप्त स्पष्टीकरण मिलता है, तो मैं इसे यहां फेंक दूंगा।
ट्रेंटन

0

मेरे मामले में, मैं MySQL कार्यक्षेत्र का उपयोग कर रहा था और मैंने अपने किसी कॉलम को तालिका में छोड़ने के दौरान उसी समस्या का सामना किया था। मुझे विदेशी कुंजी का नाम नहीं मिला। मैंने समस्या को हल करने के लिए निम्नलिखित चरणों का पालन किया:

  1. Rt। अपने स्कीमा पर क्लिक करें और 'स्कीमा इंस्पेक्टर' चुनें। यह आपको विभिन्न टेबल, कॉलम, इंडेक्स, ect प्रदान करता है।

  2. 'Indexes' नाम के टैब पर जाएं और कॉलम के नाम के नीचे 'Column' नाम खोजें। एक बार स्तंभ नाम 'तालिका' के तहत इस रिकॉर्ड के लिए तालिका का नाम जांचें। यदि यह आपके इच्छित तालिका के नाम से मेल खाता है, तो 'नाम' नामक कॉलम से विदेशी कुंजी का नाम नोट करें।

  3. अब क्वेरी निष्पादित करें: ALTER टेबल टेबलनाम XXX DROP KEY विदेशीकेनाम;

  4. अब आप ड्रॉप स्टेटमेंट को निष्पादित कर सकते हैं जो सफलतापूर्वक निष्पादित होगा।


0

मुझे MySQL 5.6 के साथ यह त्रुटि मिली लेकिन इसका विदेशी चाबियों से कोई लेना-देना नहीं था। यह एक छोटे लैन पर सर्वर के रूप में कार्य करने वाली विंडोज 7 प्रोफेशनल मशीन पर था।

क्लाइंट एप्लिकेशन बैच ऑपरेशन कर रहा था जो एक टेबल बनाता है इसे कुछ बाहरी डेटा से भरता है फिर एक क्वेरी को स्थायी तालिकाओं के साथ जोड़ देता है और फिर "अस्थायी" टेबल को छोड़ देता है। यह बैच लगभग 300 बार करता है और यह विशेष दिनचर्या कई वर्षों से सप्ताह में एक सप्ताह चल रही थी जब अचानक हमें बैच में यादृच्छिक बिंदु पर समस्या का नाम बदलने में त्रुटि 1025 असमर्थ हो जाती है।

मेरे मामले में आवेदन 4 डीडीएल बयानों का उपयोग कर रहा था एक सृजन तालिका 3 क्रिएट इंडेक्स के बाद, कोई विदेशी कुंजी नहीं है। हालाँकि अनुक्रमणिका के केवल 2 वास्तव में निर्मित होते हैं और वास्तविक तालिका .frm फ़ाइल का नाम बदला गया था, विफलता के बिंदु पर।

मेरा समाधान अलग-अलग क्रिएट इंडेक्स स्टेटमेंट से छुटकारा पाने और क्रिएट टेबल स्टेटमेंट का उपयोग करके उन्हें बनाना था। लेखन के समय इसने मेरे लिए समस्या को हल कर दिया है और मेरी मदद किसी और को यह धागा मिलने पर अपना सिर खुजाने में होती है।


-2

averageRatings = FOREACH समूहीकृत समूह के रूप में उत्पन्न समूह , चलचित्र, AVG (रेटिंगसट्रेटिंग) AS avgRating, COUNT (रेटिंग के रूप में) अंकन के रूप में;

यदि आप ऊपर दिए गए किसी आदेश का उपयोग कर रहे हैं तो आपको छोटे अक्षरों में समूह का उपयोग करना चाहिए। इससे आपकी समस्या का समाधान हो सकता है। कम से कम PIG स्क्रिप्ट में।


मुझे नहीं लगता कि यह समस्या से संबंधित है, वह या वह mysql समस्या मार रहा है
Zdenek Machek
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.