MySQL: तालिका नहीं बना सकते (ग़लती से: 150)


156

मैं एक .sql फ़ाइल आयात करने की कोशिश कर रहा हूं और टेबल बनाने में विफल रहा हूं।

यहां बताया गया है कि विफल:

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;    

मैंने एक ही डेटाबेस से .sql का निर्यात किया, मैंने सभी तालिकाओं को गिरा दिया और अब इसे आयात करने की कोशिश कर रहा हूं, यह क्यों विफल हो रहा है?

MySQL: तालिका नहीं बना सकते './dbname/data.frm' (ग़लती: 150)


1
इस त्रुटि के अनिवार्य रूप से सभी कारणों के लिए, यहां MySQL में गलत 150 (और गलत 121 / अन्य विदेशी कुंजी त्रुटियों) के कारणों के लिए एक संपूर्ण संसाधन है।
जॉन स्मिथ

21
मैंने पाया है कि कॉलम समान होना चाहिए (यहां तक ​​कि अहस्ताक्षरित ध्वज का मिलान होना चाहिए)।
जस्टिन स्काइल्स

3
@ जॉनसन ... कहाँ?
चार्ल्स वुड

3
मैं इस ब्लॉग पोस्ट को पढ़ने का सुझाव देता हूं जो 10 संभावित कारणों को सूचीबद्ध करता है: verysimple.com/2006/10/22/…
मार्क अमेरी

@CharlesWood: " जॉन स्मिथ ... अप्रैल 6 '13 को 19:29 पर देखा ," जो आपकी टिप्पणी से लगभग तीन महीने पहले है। मुझे एक डर है, कि इस दुखी दुनिया के अंत तक "जहां" का रहस्य उजागर नहीं होगा! :>
trejder

जवाबों:


167

से MySQL - विदेशी कुँजी प्रतिबन्ध प्रलेखन :

यदि आप एक टेबल को फिर से बनाते हैं, जिसे गिरा दिया गया था, तो इसकी एक परिभाषा होनी चाहिए जो इसे संदर्भित करने वाले विदेशी प्रमुख बाधाओं के अनुरूप हो। इसमें सही कॉलम के नाम और प्रकार होने चाहिए, और इसमें संदर्भित कुंजियों पर अनुक्रमित होना चाहिए, जैसा कि पहले कहा गया है। यदि ये संतुष्ट नहीं होते हैं, तो MySQL त्रुटि 1005 देता है और त्रुटि संदेश में त्रुटि 150 को संदर्भित करता है, जिसका अर्थ है कि एक विदेशी कुंजी बाधा सही रूप से नहीं बनाई गई थी। इसी तरह, अगर कोई ALTER TABLE त्रुटि 150 के कारण विफल हो जाता है, तो इसका मतलब है कि परिवर्तित तालिका के लिए एक विदेशी कुंजी परिभाषा गलत रूप से बनाई जाएगी।


1
क्या एक तालिका से दो स्तंभ किसी अन्य तालिका से एक स्तंभ को संदर्भित कर सकते हैं, जहां यह PK है?
यूजीन

1
@ यूजीन: प्रत्येक दो कॉलम में पीके के लिए एक विदेशी कुंजी संबंध एक अन्य तालिका में हो सकता है - दोनों कॉलम एक ही विदेशी कुंजी संबंध के रूप में नहीं।
ओएमजी पोंजी

1
@OMGPonies: इस सवाल का जवाब देने के लिए धन्यवाद .. मैं इसके लिए देख रहा था ... मैं भी एक प्रश्न पूछा यहाँ stackoverflow.com/questions/13487010/... .... हालांकि मैं कुछ अच्छा जवाब है, लेकिन मैं अनुरूप होना चाहते हैं Whether its possible to write Nested Query for my problem? ..मैं आपसे निवेदन करूंगा कि कृपया मुझे भी उत्तर दें!
बृजेश चौहान 21:12

19
मेरी त्रुटि थी मास्टर टेबल में MyISAM और चाइल्ड टेबल InnoDB इंजन था। वर्तमान create.sql स्क्रिप्ट सभी तालिकाओं के लिए InnoDB का उपयोग कर रही थी, लेकिन मेरे पास बहुत पुरानी स्थापना थी जहां पहले स्क्रिप्ट ने MyISAM का उपयोग किया था।
जिसका समय

2
@Home - हाँ, यहाँ एक ही मुद्दे में भाग गया।
एरोह

96

त्रुटि 150 का मतलब है कि आपको अपनी विदेशी कुंजी में कोई समस्या है। संभवतः विदेशी मेज पर कुंजी ठीक उसी प्रकार की नहीं है?


15
धन्यवाद :) मेरे लिए, डेटा प्रकार INT हैं, लेकिन एक अहस्ताक्षरित है जबकि दूसरा नहीं है
Anh Nguyen

6
स्कीमा जनरेटर का उपयोग करते समय मैं अक्सर BIGINTबनाम भर में चलाता हूं INT
Xeoncross

मैं उसी मुद्दे में भाग गया जब विदेशी कुंजी INT मूल्य नहीं है। जब विदेशी कुंजी इसे संदर्भित करती है, तो स्तंभ अद्वितीय होना चाहिए।
फतहवी

62

आप वास्तविक त्रुटि संदेश को चलाकर SHOW ENGINE INNODB STATUS;और फिर LATEST FOREIGN KEY ERRORआउटपुट में देख सकते हैं।

स्रोत: एक अन्य उपयोगकर्ता से इसी तरह के सवाल का जवाब


7
यह वास्तव में बहुत उपयोगी है। यह आपको सटीक त्रुटि बताता है।
Csongor Fagyal

धन्यवाद। यह शर्म की बात है MySQL कार्यक्षेत्र इस का उपयोग नहीं करता है।
scipilot

बहुत बढ़िया। यह कितना मददगार है। आपको सटीक त्रुटि बताता है। मेरा था, स्तंभ को पूर्ण बना दिया था, लेकिन "हटाए गए सेट अशक्त" पर सेट किया था। बहुत बहुत धन्यवाद।
अभिषेक सैनी

यदि आपके पास अपने सर्वर पर विशेषाधिकार हैं :(
क्रिस्टोफर स्मित

30

डेटा प्रकार बिल्कुल मेल खाना चाहिए। यदि आप varchar प्रकारों के साथ काम कर रहे हैं, तो तालिकाओं को समान कोलेशन का उपयोग करना चाहिए।


4
टक्कर बिट के लिए धन्यवाद।
अरहंत

25

मुझे लगता है कि ये सभी उत्तर सही होने पर प्रश्न के लिए भ्रामक हैं।

वास्तविक उत्तर यह है कि आप एक पुनर्स्थापना शुरू करने से पहले, यदि आप विदेशी कुंजी के साथ डंप फ़ाइल को पुनर्स्थापित कर रहे हैं:

SET FOREIGN_KEY_CHECKS=0;

क्योंकि स्वाभाविक रूप से पुनर्स्थापना विदेशी तालिका के अस्तित्व में आने से पहले कुछ अड़चनें पैदा कर रही होंगी।


ऐसा करना मेरे लिए कारगर नहीं था, फिर भी त्रुटि देता है। कोई विचार?
जोसेफ अस्त्रहन

24

कुछ मामलों में, यदि आप संबंधित तालिकाओं के बीच अलग-अलग इंजन हैं, तो आप इस त्रुटि संदेश का सामना कर सकते हैं। उदाहरण के लिए, एक तालिका InnoDB का उपयोग कर सकती है जबकि दूसरा MyISAM का उपयोग करती है। दोनों को समान होने की आवश्यकता है


धन्यवाद - यह मेरी समस्या थी।
scipilot

यह मेरा मुद्दा था। धन्यवाद
thed0ctor

यह तब हो सकता है यदि आपने mysqldump का उपयोग करके इनोडब टेबल की एक sql फ़ाइल बनाई और उन्हें इसके बजाय myisam talbes के रूप में निर्यात किया गया।
अमादो मार्टिनेज

11

त्रुटि नं। 150 का मतलब एक विदेशी कुंजी बाधा है। संभवत: विदेशी कुंजी (तालिका keywords) पर निर्भर होने वाली तालिका से पहले आप यह तालिका बना रहे हैं । पहले वह तालिका बनाएं और उसे ठीक काम करना चाहिए।

यदि यह नहीं है, तो विदेशी कुंजी विवरण को हटा दें और तालिका बनने के बाद इसे जोड़ दें - आपको विशिष्ट बाधा विफलता के बारे में अधिक सार्थक त्रुटि संदेश मिलेगा।


10

काफी कुछ चीजें हैं जो गलत 150 का कारण बन सकती हैं, इसलिए इस विषय पर खोज करने वाले लोगों के लिए, यहां मुझे लगता है कि यह संपूर्ण सूची के करीब है (स्रोत क्रोन 150 का स्रोत ):

गलत 150 या गलत 121 के लिए, बस SHOW इंजन INNODB STATUS में टाइप करने के लिए, "LATEST FOREIGN KEY ERROR" नामक एक अनुभाग है। इसके तहत यह आपको एक बहुत ही उपयोगी त्रुटि संदेश देगा, जो आम तौर पर आपको तुरंत बता देगा कि मामला क्या है। इसे चलाने के लिए आपको SUPER विशेषाधिकारों की आवश्यकता होती है, इसलिए यदि आपके पास ऐसा नहीं है, तो आपको निम्नलिखित परिदृश्यों का परीक्षण करना होगा।

1) डेटा प्रकार मेल नहीं खाते: कॉलम के प्रकार समान होने चाहिए

2) मूल कॉलम अनुक्रमणित नहीं हैं (या गलत क्रम में अनुक्रमित)

3) कॉलम Collations मैच नहीं है

4) एक पूर्ण स्तंभ पर एक सेट का उपयोग करना

5) टेबल कोलाज मेल नहीं खाते: भले ही कॉलम का मिलान कुछ MySQL संस्करणों पर हो, यह एक समस्या हो सकती है।

6) पैरेंट कॉलम असल में पेरेंट टेबल में मौजूद नहीं है। वर्तनी की जाँच करें (और शायद स्तंभ के आरंभ या अंत में एक स्थान)

7) स्तंभों में से किसी एक पर अनुक्रमणिका अपूर्ण है, या पूर्ण अनुक्रमणिका के लिए स्तंभ बहुत लंबा है। ध्यान दें कि MySQL (जब तक आप इसे ट्वीक नहीं करते हैं) की अधिकतम एकल स्तंभ कुंजी लंबाई 767 बाइट्स होती है (यह एक varchar (255) UTF कॉलम से मेल खाती है)

यदि आपको एक त्रुटिपूर्ण 121 मिलता है, तो इसके कुछ कारण हैं:

1) आपके द्वारा चुना गया बाधा नाम पहले ही लिया जा चुका है

2) कुछ सिस्टम पर अगर आपके स्टेटमेंट और टेबल के नामों में कोई अंतर है। यह आपको काट सकता है यदि आप एक सर्वर से दूसरे में जाते हैं जिसमें अलग-अलग केस हैंडलिंग नियम हैं।


कुछ संस्करणों में आपको एक गलत 150 मिलता है यदि तालिका निर्दोष नहीं है, लेकिन कुछ संस्करणों में यह चुपचाप विफल रहता है।
जूकाला

धन्यवाद, यह बहुत अच्छा था: | ------------------------ | नवीनतम फॉर्च्यून कुंजी त्रुटि | ------------------------ | हालाँकि, आपने कुछ सेट स्थिति को परिभाषित किया है | कॉलम को NULL के रूप में परिभाषित नहीं किया गया है।
सैम क्रिचले

8

कभी-कभी MySQL सिर्फ सुपर बेवकूफ है - मैं विदेशी-कुंजियों के कारण का कारण समझ सकता हूं .. लेकिन मेरे मामले में, मैंने अभी पूरे डेटाबेस को गिरा दिया है, और मुझे अभी भी त्रुटि मिलती है ... क्यों? मेरा मतलब है, अब कोई डेटाबेस नहीं है ... और sql- उपयोगकर्ता का उपयोग कर रहा हूँ सर्वर पर किसी भी अन्य DB की पहुंच नहीं है ... मेरा मतलब है, वर्तमान उपयोगकर्ता के लिए सर्वर "खाली" है और मुझे अभी भी प्राप्त होता है यह गलती? क्षमा करें, लेकिन मुझे लगता है कि MySQL मेरे लिए झूठ बोल रहा है ... लेकिन मैं इसके साथ सौदा कर सकता हूं :) बस एसक्यूएल की इन दो पंक्तियों को अपने बकवास बयान के चारों ओर जोड़ दें:

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

अब sql को निष्पादित किया जाना चाहिए ... यदि आपको वास्तव में एक विदेशी-कुंजी समस्या है, तो यह आपके द्वारा उस पंक्ति को दिखाएगा जहां आप चेक को फिर से सक्षम करेंगे - यह तब विफल हो जाएगा .. लेकिन मेरा सर्वर अभी शांत है :)


यह समस्याएँ पैदा कर सकता है यदि स्तंभ और स्तंभ के बीच वास्तव में मतभेद हैं जो यह संदर्भित कर रहा है। उदाहरण के लिए। मान लें कि संदर्भित स्तंभ एक varchar (200) है और संदर्भित करने वाला varchar (50) है, तो जब कैस्केड का प्रयास किया जाता है तो अजीब व्यवहार को सुनिश्चित किया जा सकता है। मैं एक समस्या में नहीं चला गया हूँ जहाँ ग़लती से 150 डेटा बेमेल होने के कारण जारी किया जाता है।
जुकाला

दिलचस्प जानकारी @juacala :) मेरे लिए मज़ेदार है, जब भी मैं इसमें भागता हूं, तो मेरा दृष्टिकोण हमेशा इसे तय करता है ... आज तक कम से कम: डी लेकिन हम कभी भी सीखना बंद नहीं करते हैं, ठीक है;)
जेबी

इससे वास्तव में मुझे स्क्रिप्ट लिपिबेस उत्पन्न होने में मदद मिली। स्क्रिप्ट MySQL> 5.5 पर त्रुटिपूर्ण रूप से चली, लेकिन संस्करण 5.1 के लिए विफल रही।
डेलबर्टो

4

ऊपर दिए गए उत्तरों के माध्यम से मंडराते हुए, और थोड़ा सा प्रयोग करने के बाद, यह MySQL (1005 - त्रुटि 150) में विदेशी कुंजी त्रुटियों को हल करने का एक प्रभावी तरीका है।

विदेशी कुंजी को ठीक से बनाए जाने के लिए, सभी MySQL के लिए पूछना है:

  • सभी संदर्भित कुंजियों के लिए या तो प्राथमिक या अद्वितीय सूचकांक होना चाहिए।
  • कॉलम को फिर से संदर्भित करना जरूरी है कि संदर्भित स्तंभ के समान डेटा प्रकार है।

इन आवश्यकताओं को पूरा करें और सब ठीक हो जाएगा।


4

मैंने इस त्रुटि का अनुभव किया जब विंडोज एप्लिकेशन को लिनक्स में पोर्ट किया। विंडोज में, डेटाबेस तालिका नाम केस-असंवेदनशील हैं, और लिनक्स में वे केस-संवेदी हैं, शायद फ़ाइल सिस्टम अंतर के कारण। तो, विंडोज मेज पर Table1के रूप में ही है table1, और में REFERENCESदोनों table1और Table1काम करता है। लिनक्स पर, जब अनुप्रयोग डेटाबेस संरचना बनाने के table1बजाय प्रयोग किया जाता है Table1तो मैंने त्रुटि # 150 देखी; जब मैंने Table1संदर्भ में सही चरित्र का मामला बनाया , तो यह लिनक्स पर भी काम करने लगा। इसलिए, यदि कुछ और मदद नहीं करता है, तो सुनिश्चित करें कि REFERENCESलिनक्स में होने पर आप तालिका नाम में सही वर्ण मामले का उपयोग करते हैं।


यह भी मेरा मामला था! केस-असंवेदनशील (OS X) से स्क्रिप्ट को केस-संवेदी mysql संस्करण (डेबियन) में ले जाना।
mircealungu

3

अपनी तालिकाओं के इंजन को बदलें, केवल innoDB विदेशी कुंजी का समर्थन करता है


3

पी तालिका में बनाया गया है तो CHARSET और फिर आप एक और CHARSET..then में FK तालिका बनाने के भी आपको यह त्रुटि मिल सकता है ... मैं भी यह त्रुटि आई लेकिन पी के चारसेट बदलने के बाद तो शब्दसमुच्चय यह त्रुटियों के बिना निष्पादित किया गया

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

ज्यादातर मामलों में समस्या इंजन की खराबी के कारण है। यदि माता-पिता को InnoDB द्वारा बनाया गया है, तो संदर्भित तालिकाओं को MyISAM द्वारा बनाया जाना चाहिए और इसके विपरीत


3

मेरे मामले में। मुझे इंजन और चारसेट की समस्या थी क्योंकि मेरे होस्टिंग सर्वर ने सेटिंग्स बदल दीं और मेरी नई टेबल MyISAM थी लेकिन मेरी पुरानी टेबल्स InnoDB हैं। बस मैं बदल गया।


यह मेरे लिए सही था, क्योंकि मैं अपने द्वारा बनाए गए डेटाबेस में फेरबदल कर रहा था।
फोंचटेक

3

आमतौर पर, विदेशी कुंजी और प्राथमिक कुंजी के बीच बेमेल त्रुटि का कारण बनता है: 150।

विदेशी कुंजी एक ही होना चाहिए डेटाप्रकार के रूप में प्राथमिक कुंजी । इसके अलावा, यदि प्राथमिक कुंजी को अहस्ताक्षरित किया जाता है तो विदेशी कुंजी को भी अहस्ताक्षरित होना चाहिए ।


3

मेरा भी यही मुद्दा था। यह टेबल के कॉलम Collation और Character Set से संबंधित था । सुनिश्चित करें कि कैरेक्टर सेट और कॉलेशन दो टेबलों पर दोनों कॉलम के लिए समान होना चाहिए। यदि आप उस पर एक विदेशी कुंजी सेट करना चाहते हैं। उदाहरण- यदि आप userImage table के userID कॉलम पर विदेशी कुंजी लगाते हैं, तो user टेबल का userID कॉलम संदर्भित करता है। फिर Collation समान होना चाहिए जो कि दोनों टेबल के स्तंभों के लिए utf8_general_ci और Character set utf8 हो । आम तौर पर जब आप एक टेबल बनाते हैं तो mysql सर्वर सेटिंग्स से इन दोनों कॉन्फ़िगरेशन को ले लेता है।


मैंने पहले इस कवि को क्यों नहीं देखा !? मैंने मूल कारण का पता लगाने में एक घंटा बिताया। यह मेरे मामले में चारसेट था। संदर्भित और संदर्भित तालिकाओं में एक ही चारसेट होना चाहिए।
सुजीत जोशी

2

कृपया सुनिश्चित करें कि आपके प्राथमिक कुंजी कॉलम और संदर्भित कॉलम दोनों में समान डेटा प्रकार और विशेषताएँ (अहस्ताक्षरित, बाइनरी, अहस्ताक्षरित ज़ेरोफ़र आदि) हैं।


2

एक वास्तविक किनारे का मामला है जहाँ आपने एक डेटाबेस का नाम बदलने के लिए MySQL टूल, (Sequel Pro in my case) का उपयोग किया है। फिर उसी नाम से एक डेटाबेस बनाया।

इसने विदेशी कुंजी बाधाओं को एक ही डेटाबेस के नाम पर रखा, इसलिए नामांकित डेटाबेस (जैसे my_db_renamed) में नए बनाए गए डेटाबेस (my_db) में विदेशी कुंजी बाधाएं थीं

यह निश्चित नहीं है कि क्या यह सीक्वल प्रो में बग है, या यदि कुछ उपयोग के मामले में इस व्यवहार की आवश्यकता है, लेकिन यह मुझे सुबह का सबसे अच्छा हिस्सा है: /


2

मेरी भी यही त्रुटि थी। मेरे मामले में त्रुटि का कारण यह था कि मेरे पास बाधा पर एक सेट पूरा विवरण था, जबकि जिस क्षेत्र में मैंने बाधा को अपनी परिभाषा में रखा था, वह पूर्ण विवरण नहीं था। खेत में NULL डालने से समस्या हल हो गई।


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. मेरे नए क्षेत्र को प्रत्येक रिकॉर्ड पर मूल तालिका से मान के साथ रिक्त फ़ील्ड को ऑटोफ़िल करने की आवश्यकता है, इससे पहले कि बाधा को लागू किया जा सके। जब भी बाधा लागू की जाती है तो उसे तालिका डेटा की अखंडता को अक्षुण्ण रखने की आवश्यकता होती है। बाधा (विदेशी कुंजी) को लागू करना अभी तक कुछ डेटाबेस रिकॉर्ड थे, जिनके मूल तालिका से मान नहीं थे, इसका मतलब होगा कि डेटा भ्रष्ट है, इसलिए MySQL कभी भी आपकी अवधारणा को पूरा नहीं करेगा।

यह याद रखना महत्वपूर्ण है कि सामान्य परिस्थितियों में यदि आपने समय से पहले अपने डेटाबेस की अच्छी तरह से योजना बनाई है, और डेटा प्रविष्टि से पहले बाधाओं को लागू किया है तो इस विशेष परिदृश्य से बचा जाएगा।

इस गोच से बचने के लिए आसान दृष्टिकोण है

  • अपने डेटाबेस टेबल डेटा को सहेजें
  • तालिका डेटा (और तालिका कलाकृतियाँ अर्थात अनुक्रमणिका आदि) को काटें
  • बाधाओं को लागू करें
  • अपना डेटा आयात करें

मुझे उम्मीद है इससे किसी को सहायता मिलेगी


1

शायद यह मदद करेगा? प्राथमिक कुंजी स्तंभ की परिभाषा विदेशी कुंजी स्तंभ के समान होनी चाहिए।


1

सुनिश्चित करें कि सभी तालिकाएँ विदेशी कुंजी - InnoDB इंजन का समर्थन कर सकती हैं


1

PARENT टेबल का कॉलम, जिसका आप चाइल्ड टेबल से जिक्र कर रहे हैं, अद्वितीय होना चाहिए। यदि ऐसा नहीं है, तो त्रुटि संख्या 150 का कारण बनें।


यह शायद आपको थोड़ा और विस्तार से जोड़ने के लायक होगा - उदाहरण के लिए विशिष्ट कॉलम और टेबल के नाम
जोनाथन

1

एक ही मेज के साथ एक Django mysql डेटाबेस डंपिंग जब मैं एक समान समस्या थी। मैं डेटाबेस को एक पाठ फ़ाइल में डंप करके समस्या को ठीक करने में सक्षम था, तालिका को emacs का उपयोग करके फ़ाइल के अंत में स्थानांतरित कर रहा हूं और संशोधित sql डंप फ़ाइल को नए उदाहरण में आयात कर रहा हूं।

एचटीएच ऊवे


1

मैंने चर को स्वीकार करके समस्या को ठीक किया है null

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

1

MySQL कमांड की एक श्रृंखला निष्पादित करते समय मुझे वही समस्या मिली। अन्य तालिका के लिए एक विदेशी कुंजी का संदर्भ देते समय एक तालिका बनाने के दौरान मेरा होता है जो अभी तक नहीं बनाया गया था। यह संदर्भित करने से पहले तालिका अस्तित्व का अनुक्रम है।

समाधान: चाइल्ड टेबल बनाने से पहले सबसे पहले पैरेंट टेबल बनाएं जिसमें एक विदेशी चाबी हो।


1

विदेशी कुंजी के बिना तालिका बनाएं, फिर विदेशी कुंजी को अलग से सेट करें।

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