Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

तालिका में विदेशी कुंजी कैसे डालें?

मुझे पूरी तरह से यकीन नहीं है कि 'गलत आईडी इनपुट' से आपका क्या मतलब है, लेकिन मैं मान लूंगा कि आपका मतलब एक ऐसी आईडी है जो मान्य नहीं है, बल्कि सिर्फ एक गलती है (जैसे यह कहना कि कोई अलग शहर में है जहां वे वास्तव में हैं हैं)।

विदेशी कुंजी बाधा का अर्थ है कि वे 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 में मान टेबल - मौजूद नहीं है।

आप विदेशी कुंजियों के बारे में डेटाबेस अवधारणाओं में पढ़ सकते हैं गाइड



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ऑरैकल में एकाधिक नेस्टेड टेबल में एकाधिक रिकॉर्ड अपडेट करें

  2. Oracle:न्यूलाइन पर टेक्स्ट फ़ील्ड को विभाजित करें

  3. मैं Oracle DB में चल रही प्रक्रियाओं को कैसे दिखाऊँ?

  4. प्रत्येक कॉलम के लिए अलग-अलग मानों की अलग-अलग गणना करें

  5. CSV फ़ाइल के मानों के साथ Oracle तालिका अपडेट करें