2013-03-11 6 views
31

जोड़ने के लिए मैं SQL के लिए बेहद नया हूं और मैं एक नया कॉलम बनाने के लिए एक सरल वैकल्पिक तालिका निष्पादित करने की कोशिश कर रहा हूं और इसे अपने डेटाबेस में एक और सरल तालिका का संदर्भ देने के लिए एक विदेशी कुंजी के रूप में उपयोग कर रहा हूं। मैं दोनों तालिकाओं बदल दिया है InnoDB होने कीविदेशी कुंजी (MySQL)

हालांकि, जब ALTER तालिका कोड को क्रियान्वित करने, मैं निम्नलिखित त्रुटि मिलती है:

तालिका 1:

Error 1452 Cannot add or update a child row: 
a foreign key constraint fails (`toys`.<result 2 when 
explaining filename '#sql-6d4_6'>, CONSTRAINT 
`#sql-6d4_6_ibfk_1` FOREIGN KEY (`toy_id`) REFERENCES `toys` (`toy_id`))  

नीचे दोनों तालिकाओं की DESC हैं:

FIELD  TYPE  NULL KEY  EXTRA 
toy_id  int(11) NO  PRI  auto_increment 
toy varchar(50) YES   

तालिका 2:

FIELD  TYPE  NULL KEY  EXTRA 
boy_id  int(11)  NO  PRI  auto_increment 
boy   varchar(50) YES 

और यह ALTER क्वेरी मैं प्रदर्शन करने के लिए कोशिश कर रहा था है:

ALTER TABLE boys 
    ADD COLUMN toy_id INT NOT NULL, 
    ADD CONSTRAINT toys_toy_id_fk 
    FOREIGN KEY(toy_id) 
    REFERENCES toys(toy_id); 

मैं इसे पता लगाने की कोशिश भर में देखा है, लेकिन कोई भाग्य के साथ। अग्रिम धन्यवाद, और कृपया इस नौसिखिया :) करने के लिए तरह हो

संपादित करें:

यहाँ शो दोनों तालिकाओं के लिए टेबल बनाएं हैं:

तालिका 1:

CREATE TABLE `toys` (
     `toy_id` int(11) NOT NULL AUTO_INCREMENT, 
     `toy` varchar(50) DEFAULT NULL, 
     PRIMARY KEY (`toy_id`) 
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 

तालिका 2:

CREATE TABLE `boys` (
     `boy_id` int(11) NOT NULL AUTO_INCREMENT, 
     `boy` varchar(50) DEFAULT NULL, 
     PRIMARY KEY (`boy_id`) 
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 
+0

पिछले 'ADD' निकालें:' ... विदेशी कुँजी (toy_id) toys_toy_id_fk स्थिर बिंदु जोड़ें ... ' –

+0

मैंने ADD CONSTRAINT को हटाने और विदेशी कुंजी जोड़ने के साथ-साथ ADD CONSTRAINT को छोड़कर और विदेशी कुंजी से पहले "ADD" को हटाने का प्रयास किया है, लेकिन एक ही त्रुटि प्राप्त करें। – Keith

+0

क्या आप 'शो क्रिएट टेबल खिलौने' के आउटपुट पोस्ट कर सकते हैं और 'टेबल लड़कों को दिखा सकते हैं'? –

उत्तर

44

आप एक पंक्ति में शून्य नल कॉलम नहीं जोड़ सकते हैं जिसमें शून्य पंक्तियों से अधिक है, जब कोल्लू एमएन उन मानों से बाध्य है जो अभिभावक तालिका में उनसे मेल खाते हैं, और फिर भी केवल शून्य मान हैं क्योंकि यह कोई नया, अप्रचलित कॉलम नहीं है।

कामकाज चरणों में ऐसा करना है: कॉलम जोड़ें, लेकिन इसे न घोषित न करें, और अभी तक विदेशी कुंजी घोषित न करें।

ALTER TABLE boys 
ADD COLUMN toy_id INT; 

फिर इसे वैध डेटा के साथ पॉप्युलेट करें जो आपके खिलौनों की तालिका में कुछ मूल्यों से मेल खाता है।

UPDATE boys SET toy_id = ...; 

तो नहीं NULL होने के लिए स्तंभ में परिवर्तन, और बाधा बनाने के लिए:

ALTER TABLE boys MODIFY COLUMN toy_id INT NOT NULL, 
ADD CONSTRAINT toys_toy_id_fk 
FOREIGN KEY(toy_id) 
REFERENCES toys(toy_id); 
+0

ऐ के लिए 'शो क्रिएट टेबल' शामिल करने के लिए पोस्ट को अपडेट किया है, मुझे 'auto_increment = 6' को ध्यान में रखना चाहिए था। –

+0

यह पूरी तरह से काम किया, बहुत बहुत धन्यवाद! – Keith

संबंधित मुद्दे