2012-12-15 3 views
8

जब मैं निम्नलिखित एसक्यूएल आदेश निष्पादित करें:त्रुटि 1452 (23,000): जोड़ सकते हैं या एक बच्चे पंक्ति को अद्यतन नहीं कर सकता: एक विदेशी कुंजी बाधा में विफल रहता है

INSERT INTO test_usershosts (RID,userid,hid,Usr,Pass) 
VALUES (NULL,1,1,"user","pass"); 

मैं निम्न त्रुटि संदेश हो रही है:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`dm`.`test_usershosts`, CONSTRAINT `test_usershosts_ibfk_1` FOREIGN KEY (` 
userid`) REFERENCES `test_users` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE) 

मेरे टेबल:

CREATE TABLE IF NOT EXISTS `test_users` (
`userid` int(11) NOT NULL AUTO_INCREMENT, 
`username` varchar(10) NOT NULL DEFAULT '', 
`password` varchar(50) NOT NULL DEFAULT '', 
PRIMARY KEY (userid) 
) ENGINE=InnoDB; 

INSERT INTO `test_users` (`userid`, `username`, `password) VALUES 
(1120, 'guest', '12250170a9624f336ca24'); 

CREATE TABLE IF NOT EXISTS `test_hosts` (
`hid` int(11) NOT NULL AUTO_INCREMENT, 
`UID` int(11) NOT NULL, 
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
PRIMARY KEY (hid) 
) ENGINE=InnoDB; 

INSERT INTO `test_hosts` (`hid`, `UID`, `name`) VALUES (30, 10, 'MU'); 

CREATE TABLE IF NOT EXISTS `test_usershosts` (
`RID` int(11) NULL AUTO_INCREMENT, 
`userid` int(11) , 
`hid` int(11) , 
`Usr` varchar(100) , 
`Pass` varchar(100) , 
PRIMARY KEY (RID), 
INDEX (userid), 
INDEX (hid), 
FOREIGN KEY (userid) REFERENCES test_users (userid) 
    ON DELETE CASCADE ON UPDATE CASCADE, 
FOREIGN KEY (hid) REFERENCES test_hosts (hid) 
    ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB; 

मैं इसी तरह के कई मामलों में देखा गया है, लेकिन किसी भी समाधान नहीं मिला। किसी भी सहायता की सराहना की जाएगी।

उत्तर

17

कारण है कि आपको लगता है कि अपवाद हो रही है क्योंकि है आप तालिका test_usershosts पर एक रिकॉर्ड डाल रहे हैं जो userID का मान तालिका test_users पर मौजूद नहीं है। hid के मान के समान ही तालिका test_hosts पर मौजूद नहीं है।

तालिका test_usershosts टेबल पर निर्भर है: test_users और test_hosts। तो सुनिश्चित करें कि तालिका test_usershosts पर रिकॉर्ड्स डालने पर, hid और userid के मान पहले से ही मूल तालिकाओं पर मौजूद हैं: test_users और test_hosts

इस क्वेरी को निष्पादित करने का प्रयास करें और निश्चित रूप से इसे डाला जाएगा।

INSERT INTO test_usershosts (RID,userid,hid,Usr,Pass) 
VALUES (NULL,1120,30,'user','pass'); 

मुझे लगता है कि टेबल पर AUTO_INCREMENT विकल्प: test_users और test_hosts, आवश्यक नहीं हैं क्योंकि आपको प्रत्येक क्वेरी आपके पास दो टेबल पर क्रियान्वित कर रहे हैं पर मूल्यों की आपूर्ति कर रहे हैं।

+0

मैं एसबीएल में आने के लिए विशेष रूप से डीबीएस के संबंध में एक नोब हूं। हालांकि मुझे केवल पंक्ति आईडी को पास करना है, इसलिए 1,1 :) – Himal

2

में test_users अतिथि के UserID1120 और test_hosts में छिप = 30

आप परिवर्तन करना होगा

INSERT INTO test_usershosts (RID,userid,hid,Usr,Pass) VALUES (NULL,1,1,"user","pass"); 

रहे हैं:

INSERT INTO test_usershosts (RID,userid,hid,Usr,Pass) VALUES (NULL,1120,30,"user","pass"); 
+0

मदद के लिए धन्यवाद :) – Himal

-1

मेरे मामले में यह किसी की सेवा करता है। मैं प्राथमिक कुंजी बनाने के दौरान आमतौर पर होने वाले समाधान को खोजने के लिए संघर्ष कर रहा था जिसे अद्वितीय के रूप में भी चिह्नित किया जाता है। लेकिन मेरे मामले में इसे केवल प्राथमिक के रूप में चिह्नित किया गया था और इसे अद्वितीय के रूप में चिह्नित नहीं किया गया था, जब तक कि मैंने देखा कि यूनिका का विकल्प "खुला" था और मैंने इसे तब तक क्लिक किया जब तक कि मैं खुद को रिश्ते नहीं बना देता।

फिर रिकॉर्ड के लिए ... जांचें कि आपकी प्राथमिक कुंजी भी अद्वितीय हैं।

+0

प्राथमिक कुंजी हमेशा अनन्य होती हैं : https://en.m.wikipedia.org/wiki/Primary_key – Gildas