मुझे पूरी तरह से यकीन नहीं है कि 'गलत आईडी इनपुट' से आपका क्या मतलब है, लेकिन मैं मान लूंगा कि आपका मतलब एक ऐसी आईडी है जो मान्य नहीं है, बल्कि सिर्फ एक गलती है (जैसे यह कहना कि कोई अलग शहर में है जहां वे वास्तव में हैं हैं)।
विदेशी कुंजी बाधा का अर्थ है कि वे person
. में जो मान दर्ज करते हैं city_id
. के लिए तालिका है city
. में प्राथमिक कुंजी के रूप में मौजूद रहने के लिए मेज़। वे कोई पुराना मान city_id
. के रूप में नहीं डाल सकते हैं , केवल मान्य मान। और संबंधित city
फिर person
. में संदर्भ को हटाए/बदले बिना पंक्ति को हटाया नहीं जा सकता है तालिका (उदाहरण के लिए किसी भिन्न मान्य मान पर अद्यतन करना), या - इस मामले में संभावना नहीं - हटाए जाने को कैस्केडिंग करना ताकि कोई भी person
city
. के लिए रिकॉर्ड हटा दिए जाते हैं।
तो मान लें कि आप अपनी टेबल इस प्रकार बनाते हैं:
create table city (id number primary key, code varchar2(2), name varchar2(30));
create table person (id number, name varchar2(30), last_name varchar2(30),
city_id number not null references city(id));
आपके city
. में आपके तीन रिकॉर्ड हैं तालिका:
insert into city (id, name) values (1, 'New York');
insert into city (id, name) values (2, 'London');
insert into city (id, name) values (3, 'Paris');
फिर आप एक person
जोड़ सकते हैं जो उस शहर की आईडी को शामिल करके न्यूयॉर्क में रहता है:
insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);
(SQL Fiddle )
आप मिलान करने वाले city
. में डेटा को असामान्य नहीं कर रहे हैं रिकॉर्ड, इसलिए यदि न्यूयॉर्क ने अपना नाम वापस न्यू एम्स्टर्डम में बदलने का फैसला किया, तो कहें, यह city
के लिए एक ही अपडेट होगा रिकॉर्ड करें और आपको किसी person
. को स्पर्श नहीं करना पड़ेगा उस शहर के लोगों के लिए रिकॉर्ड।
अगर आपने city
. को मिटाने की कोशिश की है न्यूयॉर्क के लिए रिकॉर्ड, आपको यह कहते हुए एक त्रुटि (ORA-02292) मिलेगी कि एक चाइल्ड रिकॉर्ड मौजूद है। आप person
को अपडेट कर सकते हैं एक city_id
. रखने के लिए रिकॉर्ड करें 2 या 3 में से, और फिर न्यूयॉर्क को हटाने में सक्षम होगा। विचार यह है कि आप गलती से ऐसा नहीं कर सकते हैं और अनाथ डेटा को पीछे छोड़ सकते हैं - एक person_id
एक city
. की ओर इशारा करते हुए जो अब मौजूद नहीं है।
अगर आपने person
बनाने की कोशिश की है city_id
. के साथ रिकॉर्ड करें मान जो किसी city.id
. से मेल नहीं खाता मूल्य:
insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);
... तो आपको एक त्रुटि (ORA-02291) मिलेगी कि मूल कुंजी - यानी एक मिलान id
city
में मान टेबल - मौजूद नहीं है।
आप विदेशी कुंजियों के बारे में डेटाबेस अवधारणाओं में पढ़ सकते हैं गाइड ।